Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А что вы конкретно имеете в наработке по данному вопросу MS SQL?
приведите код и покажите где у вас не работает. будем разбираться.
//Пример TheVilkas
#include <ADOLib.mqh>
int createCnn=0;
int openCnn=0;
int Insert=0;
string StringConnection="DSN=dbForex;UID=sa;PWD=;";
int init()
{
CloseConnection();
DestroyConnection();
int createCnn=CreateConnection();
Sleep(10);
int openCnn=OpenConnection(StringConnection,adUseClient,0);
Sleep(10);
return(0);
}
//Пример работы:
int start()
{
//это на случай если коннект закрылся или "испортился"-причин хватает
if (createCnn<=0 || IsOpenConnection()==0)
{
createCnn=0;
openCnn=0;
CloseConnection();
Sleep(10);
DestroyConnection();
Sleep(10);
createCnn=CreateConnection();
Sleep(30);
}
if (createCnn>0 &&(openCnn<=0 || IsOpenConnection()==0 || Insert==0))
{
openCnn=0;
CloseConnection();
Sleep(10);
openCnn=OpenConnection(StringConnection,adUseClient,0);
Sleep(30);
}
//и далее записываем в БД тики
string Company=AccountCompany();
string Symb=Symbol();
//Код вставки работает
/*
string CommandText="INSERT INTO Rates (TimeCurrent,AccountCompany,Symb,DateTimeRate,Ask,Bid) "+
"VALUES("+TimeCurrent()+",'"+Company+"','"+Symb+"','"+DateTimeRate+"',"+Ask+","+Bid+")";
Execute(CommandText,adAsyncFetch);
Sleep(15);
*/
//Хочу получить данные из БД
string CommandText="select ask from test where ask='1.4560'";
string text=Execute(CommandText,adAsyncFetch);
Comment(text);
Sleep(15);
//Возвращает 1;
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
CloseConnection();
DestroyConnection();
return(0);
}
А что вы конкретно имеете в наработке по данному вопросу MS SQL?
приведите код и покажите где у вас не работает. будем разбираться.
//Пример Graff
//+------------------------------------------------------------------+
//| news001.mq4 |
//| Copyright © 2009, Graff |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Graff"
#property link ""
#property indicator_chart_window
#define DELIM ";"
//#include <mysql.mqh>
#import "libmysql.dll"
int mysql_init(int db);
int mysql_errno(int TMYSQL);
int mysql_real_connect( int TMYSQL,string host,string user,string password, string DB,int port,int socket,int clientflag);
int mysql_real_query(int TMSQL,string query,int length);
void mysql_close(int TMSQL);
int mysql_store_result(int TMSQL);
string mysql_fetch_row(int result);
int mysql_num_rows(int result);
void mysql_free_result(int result);
//#import
int mysql;
int mTicket, mType;
string mSymbol;
double mLots, mOpen, mClose, mStopLoss, mTakeProfit;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
string row;
connect();
string query="Select ask from calendar WHERE ask = '1.4567'";
int length=StringLen(query);
mysql_real_query(mysql,query,length);
int result = mysql_store_result(mysql);
int numOfRows = mysql_num_rows(result);
for (int i=0;i<numOfRows;i++) {
row = mysql_fetch_row(result);
Print(row);
Comment(row);
//Возвращает нормальное значение но вначале закаручки
IMHO - нужно писать свой dll. Слишком много языковых конструкциях нет в MQL4 - MQL5 обещает больше.
тут IMHO не поможет.
А что по документации. Что возвращает Execute?
По моему оно возвращает булевое значение. в вашем text пишется 1. Значит выполнилось корректно.
надо искать в записях.
Вот тут показал как работать через ADO - может пригодиться - получается быстро и легко
А как осуществить чтение из БД?ADOLib.mqh выглядит так:
// Constants for enum CursorTypeEnum#define adOpenUnspecified 4294967295 //$FFFFFFFF;
#define adOpenForwardOnly 0 //$00000000;
#define adOpenKeyset 1 //$00000001;
#define adOpenDynamic 2 //$00000002;
#define adOpenStatic 3 //$00000003;
// Constants for enum LockTypeEnum
#define adLockUnspecified 4294967295 //$FFFFFFFF;
#define adLockReadOnly 1 //$00000001
#define adLockPessimistic 2 //$00000002;
#define adLockOptimistic 3 //$00000003;
#define adLockBatchOptimistic 4 //$00000004;
// Constants for enum ExecuteOptionEnum
#define adOptionUnspecified 4294967295 //$FFFFFFFF;
#define adAsyncExecute 16 //$00000010;
#define adAsyncFetch 32 //$00000020;
#define adAsyncFetchNonBlocking 64 //$00000040;
#define adExecuteNoRecords 128 //$00000080;
#define adExecuteStream 296 //$00000400;
#define adExecuteRecord 2048 //$00000800;
// Constants for enum CursorLocationEnum
#define adUseNone 1 //$00000001;
#define adUseServer 2 //$00000002;
#define adUseClient 3 //$00000003;
#define adUseClientBatch 3 //$00000003;
// Constants for enum CommandTypeEnum
#define adCmdUnspecified 4294967295 //$FFFFFFFF;
#define adCmdUnknown 8 //$00000008;
#define adCmdText 1 //$00000001;
#define adCmdTable 2 //$00000002;
#define adCmdStoredProc 4 //$00000004;
#define adCmdFile 256 //$00000100;
#define adCmdTableDirect 512 //$00000200;
#import "ADOLib.dll"
int CreateConnection();
int DestroyConnection();
int OpenConnection(string ConnectionString,int CursorLocation,int CommandTimeout);
int CloseConnection();
int IsOpenConnection();
int Execute(string CommandText, int ExecuteOption);
int BeginTrans();
int CommitTrans();
int RollbackTrans();
int OpenTable(string Qry,int CursorLocation,int CursorType,int LockType,int Options);
int CloseTable();
int Requery();
int Update();
int UpdateBatch();
int Cancel();
int CancelBatch();
int CancelUpdate();
int Find(string Criteria,int SearchDirection,int Start);
int Filter(string Criteria);
int BOF();
int EOF();
int MoveFirst();
int MoveLast();
int MoveNext();
string TableStatus();
int FieldsCount();
string FieldName(int I);
string FieldType(int Name);
string FieldTypeByPos(int I);
string GetFieldValue(string Name);
string GetFieldValueByPos(int I);
int SetFieldValue(string Name);
int SetFieldValueByPos(int I);
в ADOLib.mqh
есть методы:
GetFieldValue
GetFieldValueByPos
после успешного открытия таблицы "SELECT * FROM NameTable"
устанавливаемся на нужную запись при помощи
int is_succ=MoveFirst();
и в случае успеха читаем:
string FieldVal="";
if(is_succ=1)
FieldVal=GetFieldValue("NameField");
или читаем по числовому хандлеру поля:
int hbdFld=0;
if(is_succ=1)
FieldVal=GetFieldValueByPos(hndFld);
эээ MoveFirst() метод который устанавливает на ПЕРВУЮ запись,
НУЖНЫЕ получаются либо перебором-MoveNext(),
а НУЖНЫЕ либо ищутся и/или фильтруются
см. Find(),Filter() или WHERE в SELECT....
и еще методы чтения данных GetFieldValueXXXX приводят значения полей к
типу string, поэтому в случае необходимости можно сделать
приведение к нужному типу