Авг 2

Программа на Delphi для работы с БД SQL Server 2008

В этом посте предлагается ссылка для загрузки архива с программой на Delphi для работы с БД SQL Server 2008. Несколько слов о компонентах ADOCommand и ADOConnection Довольно давно ничего не постил в блог, так как был сильно занят и занят сейчас тоже. Время необходимо уделить дочкам пока в отпуске. Достаточно много времени (все оставшееся) уходит на диссертационную тематику. Текущий план работы доступен по ссылке http://www.mctrewards.ru/files/disser.pdf. В настоящее время работаю над пунктами:
1.1. Современные технологии автоматизированного анализа состояния рынков капитала и торговых роботов. Критический анализ.
2.1. Программно-алгоритмический комплекс формирования испытательного полигона нестационарных рядов наблюдений, имитирующих динамику эволюции рынков капитала;

По пункту 2.1 большой объем программирования. Встречаются моменты, которые, как полагаю, могут быть интересны читателям. Сегодня буду рассказывать о том, как можно обратиться к таблице БД, находящейся на удаленном сервере. СУБД MS SQL Server 2008 R2. Однако учитывая, что тема программирования может быть интересна не всем, но раз пост все же открыли и до этого места дочитали, то начну с того, что дам ссылку на полезный ресурс сети Интернет, на который можно выйти под лозунгом начинайте лечение роаккутаном сейчас. Полагаю, что многим данный препарат известен и в дополнительной рекламе не нуждается. Как химик по своему первому диплому могу только добавить, что действующее вещество препарата: изотретиноин (Isotretinoin). А теперь переходим к моему второму профилю деятельности.
Программа, исходник которой можно скачать по ссылке http://www.mctrewards.ru/files/dbase.zip, выполняет следующее. Обращается к БД base, которая находится на удаленном сервере. Использую компонент 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. Такой вариант формирования строки не самый лучший с позиции обеспечения безопасности, но демонстрирую программу, которая работает, а не оптимально написанный вариант, который более безопасен, оптимизирован, компактен, но разбираться в нем намного сложнее. В БД base есть таблицы вида eurusd1, usdcad1, gbpusd1 и др.

В таблице хранится информация о котировках. Таблицы можете сделать, используя следующий код, заменив Table_1, например, на eurusd1 :

/* Чтобы предотвратить возможность потери данных, необходимо внимательно просмотреть этот сценарий, прежде чем запускать его вне контекста конструктора баз данных.*/
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
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]
GO
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]
GO
ALTER TABLE dbo.Table_1 SET (LOCK_ESCALATION = TABLE)
GO
COMMIT


Данные берутся из файла стандартной структуры содержащего экспортированные из МТ4 котировки таймфрейма М1. Например,
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.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 Base’; 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 BASE.dbo.’+Edit1.Text+

‘ WHERE [time]=’+s1+s2+s3+s4+s5+’) print »YES» else insert into BASE.dbo.EURUSD1 values(‘+s1+s2+s3+s4+s5+’,»’+s6+»’,»’+s7+»’,»’+s8+»’,»’+s9+»’,»’+s10+»’);’;
ADOCommand1.CommandText:=sf; ADOCommand1.Execute; goto l2;
{Пример формируемой в итоге строки
ADOCommand1.CommandText:=’if exists (select * from BASE.dbo.EURUSD1 WHERE [time]=201102030012)

print »YES» else insert into BASE.dbo.EURUSD1 values(201102030012,»0.9507»,»0.9507»,»0.9507»,»0.9507»,»1»);’;
ADOCommand1.Execute; } l1:closefile(f);

Полагаю, что код не слишком сложен и комментировать дальше не буду. Напоминаю, что архив с программой можно скачать по приведенной ранее ссылке. Если есть вопросы – пишите.  На этом на сегодня все.

Нет, не все. Не смог удержаться о того, чтобы не дать информацию о публикации на форуме http://pitforex.com/index.php?topic=1440.0
Пару недель назад рассказывал об одном советнике с очень “крутой” защитой, основанной на использовании dll. О подборе кода рассказывал и это не интересно, так как уже было. Интересно то, что библиотеку полностью разделали под орех и опубликовали исходный код. Так как информация стала общедоступной, то повторю его и я.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
{ return a2 == (unsigned __int64)(signed __int64)
(floor(3.0 * (((double)(11 * a1) + 13.4356) *
11.0 + 111.0) * 7.0 + 7.0 *
((double)((21 * a1 + 3) / 17) + 433.675))
* -13.0);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
signed int __stdcall
TradeSign(int a1, int a2, double a3, int a4,
int a5, double a6, int a7, int a8, int a9, int a10)
{
int v10; // eax@1
signed int result; // eax@3
LOBYTE(v10) = CheckCode(a1, a2);
if ( v10 != 1 )
goto LABEL_9;
if ( a3 > a6 )
return 1;
if ( a3 >= a6 )
LABEL_9:
result = 0;
else
result = -1;
return result;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Вот такая элементарная защита! Ниже скриншот со ссылкой на программу, которая позволяет делать подобный декомпил.

Поделитесь статьей со своими друзьями
Общайтесь со мной:
comments: Closed

Comments are closed.