Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка SQL [D5, WinXP]


Kara ©   (2005-08-04 08:21:00) 

Всем привет! Кто-нибудь может мне подсказать что это за ошибка? Я пытаюсь записать содержимое StringGrid в таблицу базы, но при записи выдается ошибка:"Projecr Appl_Tel.exe raised exeption class EDBEngineError with message 'General SQL error.[Microsoft][ODBC SQL Driver][SQL Server]line2: Incorect syntax near @P10'. Proces stoped...". При этом я не использую никаких процедур. Что такое @P10? Я пишу только следующее:
with Q_Ins do begin
   SQL.Clear;
   SQL.Add('Insert into Compl_Cont (tel,DateCl,...)');
   SQL.Add(' Values (:pt_l,:pdata ...');
   ParamByName('pt_l').AsString:=SG_Result.Cells[0,j];
   ...
   Close;
try
ExecSQL;
except
showmessage('У Вас нет права на запись в базу или база временно недоступна!');
application.MainForm.Close;
end;


Kara   (2005-08-04 12:20:00) [1]

Ох, черт! Я извиняюсь за причиненное беспокойство. Всем огромное спасибо. Tof раз примите мои извинения.


DiamondShark   (2005-08-04 12:20:00) [2]


> ANB ©   (04.08.05 12:17) [14]

А там нефиг было хлопать. Вся информация содержится в сообщении об ошибке.
Отсчитал в тексте команды десятый параметр, и посмотрел вокруг него.
Сервер не обманул: ошибка действительно near.

А весь остальной код и смотреть не надо.


ANB   (2005-08-04 12:17:00) [3]


> DiamondShark ©   (04.08.05 12:14) [12]
- а я прохлопал. Старею :(((


ANB   (2005-08-04 12:16:00) [4]


> Kara   (04.08.05 11:56) [11]

Проблемы пока не вижу, хоть код и жутковат. А как ты гарантируешь, что в SG_Result.Cells[9,j]; у тебя именно число ?
И еще, либо сделай обработку ошибки по человечески, либо пока убери ее. И сними галку, чтобы делфа не останавливалась на ошибках.


DiamondShark   (2005-08-04 12:14:00) [5]


> Kara   (04.08.05 11:56) [11]

Ну вот теперь всё ясно.


>    SQL.Add(' Values (:pt_l,:pdata,:pg_d,:pvt_f,:pd_l,:ps_u,'+
>    ':pComplTypID,:pAnswTypID,:pPrSec,:pAnswCount ');

Скобка пропущена:
':pComplTypID,:pAnswTypID,:pPrSec,:pAnswCount )');

ЗЫ
Странно, вообще-то, не вникать в сообщения об ошибках.
Сказано же: "Incorect syntax", ну так проверь синтакс.


Kara   (2005-08-04 11:56:00) [6]

Полный текст исполняемой процедуры:
procedure TContent_f.Save1Click(Sender: TObject);
begin
If SG_Result.Cells[0,1]='' then
showmessage('Нет информации для сохранения!!!');
For j:=1 to SG_Result.RowCount-1 do begin
with Q_Ins do begin
   SQL.Clear;
   SQL.Add('Insert into Compl_Cont (tel,DateCl,TnCd,TelCl,LenCl,CountCl,ComplTypID,'+
   'AnswTypID,PrSec,AnswCount)');
   SQL.Add(' Values (:pt_l,:pdata,:pg_d,:pvt_f,:pd_l,:ps_u,'+
   ':pComplTypID,:pAnswTypID,:pPrSec,:pAnswCount ');
   ParamByName('pt_l').AsString:=SG_Result.Cells[0,j];
   ParamByName('pdata').AsDateTime:=d;
   ParamByName('pg_d').AsString:=SG_Result.Cells[2,j];
   ParamByName('pvt_f').AsString:=SG_Result.Cells[3,j];
   ParamByName('pd_l').AsString:=SG_Result.Cells[4,j];
   ParamByName('ps_u').AsString:=SG_Result.Cells[5,j];
   ParamByName('pComplTypID').Asinteger:=ComplID;
   ParamByName('pAnswTypID').Asinteger:=AnsID;
   ParamByName('pPrSec').Asstring:=SG_Result.Cells[8,j];
   ParamByName('pAnswCount').Asstring:=SG_Result.Cells[9,j];
   Close;
try
ExecSQL;
except
showmessage('У Вас нет права на запись в базу 061 или база временно недоступна!');
application.MainForm.Close;
end;
end;
end;
ClearFields;
end;
А структура Compl_Cont такая:
Column Name Date Type Lenght
ApplID     int         4
NN     smallint 2
tel     char 6
LndCd     char 4
TnCd     varchar 10
TelCl     char 12
DateCl     datetime 8
LenCl     varchar 4
CountCl     numerc 9
ComplTypID  tinyint 1
AnswTypID   tinyint 1
AnswCount   numeric 9
AnswMSA     tinyint 1
PrSec     char 3
DatePr     datetime 8
UsrPr     varchar 50
DateCh     datetime 8
UsrCh     varchar 50


Fay   (2005-08-04 11:38:00) [7]

2 Ольга   (04.08.05 11:17) [8]
2ANB ©   (04.08.05 11:21) [9]

Это не триггер. Запустите SQL Profiler и убедитесь.


ANB   (2005-08-04 11:21:00) [8]

Причем кривой триггер, так как MS SQL не поддерживает понятия валидности.


Ольга   (2005-08-04 11:17:00) [9]

Есть такое предположение, что у таблицы есть триггер, который и выдает ошибку.


ЮЮ   (2005-08-04 10:55:00) [10]

>Ольга   (04.08.05 10:49) [6]

>что выполняем?
 запрос на вставку
>закрываем запрос
 он и так закрыт (SQL.Clear, SQL.Add), просто лиший и бесполезный вызов метода


Ольга   (2005-08-04 10:49:00) [11]

Close;        --  закрываем запрос
 ExecSQL;      --  что выполняем?


ЮЮ   (2005-08-04 09:58:00) [12]

SQL.Add('Insert into Compl_Cont (tel,DateCl,...)');
SQL.Add(' Values (:pt_l,:pdata ...');

приведи полный текст, без ...
и структуру Compl_Cont не помеша ло бы


Digitman   (2005-08-04 09:43:00) [13]

StringGrid-то здесь причем ?

вместо

ParamByName('pt_l').AsString:=SG_Result.Cells[0,j];

попробуй

ParamByName('pt_l').AsString:='Строка';

и получишь ту же ошибку


> У Вас нет права на запись в базу или база временно недоступна


мало ли какое исключение может возникнуть !
почему сразу "нет прав", "недоступна" ?


Kara   (2005-08-04 09:37:00) [14]

Выдается ошибка после try. Ничего в общем не может сделать. А может быть это потому, что StringGrid заполняется данными из одной базы и после некоторого изменения данные записываются в другую базу.


evvcom   (2005-08-04 08:32:00) [15]


> Что такое @P10

Очень похоже на MSSQL параметр.
>    SQL.Clear;
>    SQL.Add

Вот любители код перегружать! В чем смысл динамического построения запроса?


ЮЮ   (2005-08-04 08:27:00) [16]

опять, скрыл за ... место ошибки и говорит "помогите"


Наверх

Титульная страница Поиск, карта сайта Написать письмо