powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / где я нагрешил в ф-ии формирующей sql-запрос?
7 сообщений из 7, страница 1 из 1
где я нагрешил в ф-ии формирующей sql-запрос?
    #34175466
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MS SQL, C++Builder5.
Имею ф-ю, которой много лет. Недавно её текст мне попался на глаза и я слегка её поправил.
После чего она отказывает, если запрос с параметрами.
Сообщение: произошли ошибки во время выполнения многошаговой операции OLE DB
Не обнаружите ли причину. Я уже 2 часа тупо на неё смотрю.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
TADOQuery *CreateQuery(TADOConnection *Cnct,AnsiString Sql,...){
// создание TADOQuery
// Cnct - соединение, Sql - текст Sql оператора
// после параметра Sql следует группа троек, описывающих параметры запроса
//   char * имя параметра,
//   TFieldType тип параметра (ftInteger, ftString .. см help)
//   Variant значение параметра
// признаком окончания троек является 0
// параметры должны следовать в том же порядке, как они встречаются в Sql
TADOQuery *q=new TADOQuery( 0 );
va_list ap;
char * ParamName,*p;
Variant ParamValue;
TParameter *tp;
AnsiString FileName;
TParameters* tps;
int Par;

q->Connection=Cnct;
q->SQL->Clear();
q->SQL->Add(Sql);
tps=q->Parameters;

va_start(ap,Sql);
for(;;){
    ParamName=va_arg(ap,char *);
    if(ParamName== 0 ){
        break;
    }
    tp=tps->AddParameter();
    tp->Name=ParamName;
    tp->Direction=pdInput;
    tp->DataType=va_arg(ap,TFieldType);
    ParamValue=va_arg(ap,Variant);
    switch(tp->DataType){
        case ftBlob:
            // BLOB поле берётся в файле
            FileName=(AnsiString)ParamValue;
            if(FileName.IsEmpty()){
                tp->Value=Null;
            } else {
                tp->LoadFromFile(FileName,ftBlob);
            }
            break;
        default: // все остальные типы параметров
            tp->Value=ParamValue;
            break;
    }
}
va_end(ap);
return q;
}
Пример обращения к ф-ии:
Код: plaintext
1.
2.
3.
TADOQuery *q1=CreateQuery(DataMod->ADOConnection,
  "delete from SostNakl where Nakl_ID=:Nakl_ID",
  "Nakl_ID",ftInteger,(Variant)Nakl_ID,
   0 );
...
Рейтинг: 0 / 0
где я нагрешил в ф-ии формирующей sql-запрос?
    #34175630
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Где возникает ошибка?
2. Правильно ли передаются параметры?
...
Рейтинг: 0 / 0
где я нагрешил в ф-ии формирующей sql-запрос?
    #34175807
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оибка возникает при выполнении
q->ExecSQL();

Передачу параметров я проверил в прокрутке - всё верно.
...
Рейтинг: 0 / 0
где я нагрешил в ф-ии формирующей sql-запрос?
    #34175841
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
muk07
Пример обращения к ф-ии:
Код: plaintext
1.
2.
3.
TADOQuery *q1=CreateQuery(DataMod->ADOConnection,
  "delete from SostNakl where Nakl_ID=:Nakl_ID",
  "Nakl_ID",ftInteger,(Variant)Nakl_ID,
   0 );


Попробуй так:
Код: plaintext
1.
2.
3.
4.
TADOQuery *q1=CreateQuery(DataMod->ADOConnection,
  "delete from SostNakl where Nakl_ID=?",
  "Nakl_ID",ftInteger,(Variant)Nakl_ID,
   0 );
...
Рейтинг: 0 / 0
где я нагрешил в ф-ии формирующей sql-запрос?
    #34175905
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я попробую, но до сих пор работало и в моём варианте.
Но это уже завтра.
Спасибо.
...
Рейтинг: 0 / 0
где я нагрешил в ф-ии формирующей sql-запрос?
    #34176358
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>White Owl
Вариант с "?" тоже не работает.
...
Рейтинг: 0 / 0
где я нагрешил в ф-ии формирующей sql-запрос?
    #34176397
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос снимается, т.к. следующий текст работает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
TADOQuery *CreateQuery(TADOConnection *Cnct,AnsiString Sql,...){
// создание TADOQuery
// Cnct - соединение, Sql - текст Sql оператора
// после параметра Sql следует группа троек, описывающих параметры запроса
//   char * имя параметра,
//   TFieldType тип параметра (ftInteger, ftString .. см help)
//   Variant значение параметра
// признаком окончания троек является 0
// параметры должны следовать в том же порядке, как они встречаются в Sql
TADOQuery *q=new TADOQuery( 0 );
va_list ap;
char * ParamName;
Variant ParamValue;
TParameter *tp;
AnsiString FileName;
TParameters* tps;
int Par;

q->Connection=Cnct;
q->SQL->Clear();
q->SQL->Add(Sql);
tps=q->Parameters;

va_start(ap,Sql);
for(;;){
    ParamName=va_arg(ap,char *);
    if(ParamName== 0 ){
        break;
    }
    tp=tps->FindParam(ParamName);
    if(tp==NULL){
        tp=tps->AddParameter();
    }
    tp->Name=ParamName;
    tp->Direction=pdInput;
    tp->DataType=va_arg(ap,TFieldType);
    ParamValue=va_arg(ap,Variant);
    switch(tp->DataType){
        case ftBlob:
            // BLOB поле берётся в файле
            FileName=(AnsiString)ParamValue;
            if(FileName.IsEmpty()){
                tp->Value=Null;
            } else {
                tp->LoadFromFile(FileName,ftBlob);
            }
            break;
        default:
            tp->Value=ParamValue;
            break;
    }
}
va_end(ap);
return q;
}
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / где я нагрешил в ф-ии формирующей sql-запрос?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]