Пример программы, написанный мной с использованием среды разработки Delphi. Позволяет создать базу данных, создать таблицу, а затем заполнить созданную таблицу данными, взятыми из файла. Исходник проекта и исполняемый файл доступны для загрузки. Программа, исходник которой можно скачать по ссылке https://www.mctrewards.ru/files/dbase1.zip, выполняет следующее. Обращается к БД base, которая находится на удаленном сервере. Если БД нет, то ее можно создать. Отрабатывает программный код
ADOCommand1.CommandText:=’create database ‘+Edit4.Text;
ADOCommand1.Execute;
Из него видно, что использую компонент ADOCommand1 для передачи команды на создание БД. Команда T-SQL create database имя_БД. Для подсоединения использую компонент ADOConnection. Строка для подсоединения может иметь вид, например, такой
Provider=SQLOLEDB.1;Password=Pa$$w0rd;Persist Security Info=True;User ID=sa;Initial Catalog=master;Data Source=192.168.1.3,1433;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=WINDOWS7UL;Use Encryption for Data=False;Tag with column collation when possible=False.
Для формирования строки необходимо указать имя пользователя (sa), пароль (Pa$$w0rd), IP компьютера (192.168.1.3), порт (1433). В программе реализована аутентификация с использованием имени пользователя SQL Server. Режим с использованием аутентификации от имени учетной записи Windows не реализован. Пусть в БД (например, с именем base) созданы таблицы вида eurusd1, usdcad1, gbpusd1 и др., а если их нет, то можно создать таблицу, указав ее имя. Создается таблица с использованием команды на языке T-SQL вида Create Table имя_таблицы…. В общем, отрабатывает код, представленный ниже, только вместо Table_1 подставляется имя введенной пользователем таблицы.
Структура полей имеет вид
CREATE TABLE dbo.Table_1
( time decimal(14, 0) NOT NULL,
otkz nchar(7) NULL,
kmax nchar(7) NULL,
kmin nchar(7) NULL,
zakr nchar(7) NULL,
vol nchar(5) NULL
) ON [PRIMARY]
При создании таблицы сразу создается кластерный индекс для поля time.
ALTER TABLE dbo.Table_1 ADD CONSTRAINT
PK_Table_1 PRIMARY KEY CLUSTERED ( time ) WITH( STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
Данные, которыми заполняется таблица, берутся из файла стандартной структуры содержащего экспортированные из МТ4 котировки выбранного таймфрейма. Например,
2011.06.22,21:28,1.4366,1.4367,1.4365,1.4366,11
2011.06.22,21:29,1.4367,1.4369,1.4367,1.4368,8
2011.06.22,21:30,1.4369,1.4369,1.4356,1.4360,19
2011.06.22,21:31,1.4359,1.4363,1.4359,1.4359,17
2011.06.22,21:32,1.4360,1.4361,1.4356,1.4357,28
Ниже привожу процедуру выбора файла пользователем и заполнения таблицы в БД.
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Label10.Visible:=false;
if Opendialog1.Execute then
begin
Label4.Caption:=Opendialog1.FileName;
BitBtn2.Enabled:=true;
end;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
var
s,sf:string;
s1,s2,s3,s4,s5,s6,s7,s8,s9,s10:string;
f:textfile;
label l1,l2,l3;
begin
ADOCommand1.CommandText:=’Use ‘+Edit4.Text+’;’;
ADOCommand1.Execute;
assignfile(f,Label4.Caption);
reset(f);
l2:readln(f,s);
if eof(f)=true then goto l1;
s1:=copy(s,1,4);
s2:=copy(s,6,2);
s3:=copy(s,9,2);
s4:=copy(s,12,2);
s5:=copy(s,15,2);
s6:=copy(s,18,6);
s7:=copy(s,25,6);
s8:=copy(s,32,6);
s9:=copy(s,39,6);
s10:=copy(s,46,7);
sf:=’if exists (select * from ‘+Edit4.Text+’.dbo.’+Edit3.Text+’ WHERE [time]=’+s1+s2+s3+s4+s5+’)print »YES» else insert into ‘+Edit4.Text+’.dbo.’+Edit3.Text+’ values(‘+s1+s2+s3+s4+s5+’,»’+s6+»’,»’+s7+»’,»’+s8+»’,»’+s9+»’,»’+s10+»’);’;
ADOCommand1.CommandText:=sf;
ADOCommand1.Execute;
goto l2;
l1:closefile(f);
Label10.Caption:=’Процедура загрузки данных в файл таблицы завершена’;
Label10.Visible:=true;
end;
Программу можно было усовершенствовать, дополнив дополнительными проверками на ввод корректных данных, однако если пользователь вводит корректные данные, то программа работает согласно алгоритму. Полагаю, что данный пример, который можно взять за основу, будет полезен людям, разрабатывающим программы в среде Delphi для работы с SQL Server.
В завершение поста, как обычно, ссылка на полезный ресурс сети Интернет — http://zakazik.ua/products/kondicionery/Sharp.html. Перейдя по ссылке, можно ознакомиться с каталогом кондиционеров и выбрать этот востребованный в условиях жаркого лета товар по вполне приемлемой стоимости. Большой выбор кондиционеров популярной серии Daikin (Daikin FAQ71C/RZQG71L8Y1, Daikin FTXN60L9/RXN60L9, Daikin FAQ100C/RZQG100L8Y1 и другие).