![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка 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]опять, скрыл за ... место ошибки и говорит "помогите"