Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / где я нагрешил в ф-ии формирующей sql-запрос? / 7 сообщений из 7, страница 1 из 1
04.12.2006, 16:54
    #34175466
muk07
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
где я нагрешил в ф-ии формирующей sql-запрос?
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
04.12.2006, 17:35
    #34175630
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
где я нагрешил в ф-ии формирующей sql-запрос?
1. Где возникает ошибка?
2. Правильно ли передаются параметры?
...
Рейтинг: 0 / 0
04.12.2006, 18:40
    #34175807
muk07
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
где я нагрешил в ф-ии формирующей sql-запрос?
Оибка возникает при выполнении
q->ExecSQL();

Передачу параметров я проверил в прокрутке - всё верно.
...
Рейтинг: 0 / 0
04.12.2006, 18:56
    #34175841
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
где я нагрешил в ф-ии формирующей sql-запрос?
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
04.12.2006, 19:34
    #34175905
muk07
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
где я нагрешил в ф-ии формирующей sql-запрос?
Я попробую, но до сих пор работало и в моём варианте.
Но это уже завтра.
Спасибо.
...
Рейтинг: 0 / 0
05.12.2006, 07:02
    #34176358
muk07
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
где я нагрешил в ф-ии формирующей sql-запрос?
>>White Owl
Вариант с "?" тоже не работает.
...
Рейтинг: 0 / 0
05.12.2006, 08:02
    #34176397
muk07
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
где я нагрешил в ф-ии формирующей sql-запрос?
Вопрос снимается, т.к. следующий текст работает
Код: 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
Форумы / C++ [игнор отключен] [закрыт для гостей] / где я нагрешил в ф-ии формирующей sql-запрос? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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