Текущий архив: 2005.08.21;
Скачать: CL | DM;
Вниз
Ошибка SQL Найти похожие ветки
← →
Kara (2005-08-04 08:21) [0]Всем привет! Кто-нибудь может мне подсказать что это за ошибка? Я пытаюсь записать содержимое 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;
← →
ЮЮ © (2005-08-04 08:27) [1]опять, скрыл за ... место ошибки и говорит "помогите"
← →
evvcom © (2005-08-04 08:32) [2]
> Что такое @P10
Очень похоже на MSSQL параметр.
> SQL.Clear;
> SQL.Add
Вот любители код перегружать! В чем смысл динамического построения запроса?
← →
Kara (2005-08-04 09:37) [3]Выдается ошибка после try. Ничего в общем не может сделать. А может быть это потому, что StringGrid заполняется данными из одной базы и после некоторого изменения данные записываются в другую базу.
← →
Digitman © (2005-08-04 09:43) [4]StringGrid-то здесь причем ?
вместо
ParamByName("pt_l").AsString:=SG_Result.Cells[0,j];
попробуй
ParamByName("pt_l").AsString:="Строка";
и получишь ту же ошибку
> У Вас нет права на запись в базу или база временно недоступна
мало ли какое исключение может возникнуть !
почему сразу "нет прав", "недоступна" ?
← →
ЮЮ © (2005-08-04 09:58) [5]SQL.Add("Insert into Compl_Cont (tel,DateCl,...)");
SQL.Add(" Values (:pt_l,:pdata ...");
приведи полный текст, без ...
и структуру Compl_Cont не помеша ло бы
← →
Ольга (2005-08-04 10:49) [6]Close; -- закрываем запрос
ExecSQL; -- что выполняем?
← →
ЮЮ © (2005-08-04 10:55) [7]>Ольга (04.08.05 10:49) [6]
>что выполняем?
запрос на вставку
>закрываем запрос
он и так закрыт (SQL.Clear, SQL.Add), просто лиший и бесполезный вызов метода
← →
Ольга (2005-08-04 11:17) [8]Есть такое предположение, что у таблицы есть триггер, который и выдает ошибку.
← →
ANB © (2005-08-04 11:21) [9]Причем кривой триггер, так как MS SQL не поддерживает понятия валидности.
← →
Fay © (2005-08-04 11:38) [10]2 Ольга (04.08.05 11:17) [8]
2ANB © (04.08.05 11:21) [9]
Это не триггер. Запустите SQL Profiler и убедитесь.
← →
Kara (2005-08-04 11:56) [11]Полный текст исполняемой процедуры:
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
← →
DiamondShark © (2005-08-04 12:14) [12]
> 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", ну так проверь синтакс.
← →
ANB © (2005-08-04 12:16) [13]
> Kara (04.08.05 11:56) [11]
Проблемы пока не вижу, хоть код и жутковат. А как ты гарантируешь, что в SG_Result.Cells[9,j]; у тебя именно число ?
И еще, либо сделай обработку ошибки по человечески, либо пока убери ее. И сними галку, чтобы делфа не останавливалась на ошибках.
← →
ANB © (2005-08-04 12:17) [14]
> DiamondShark © (04.08.05 12:14) [12]
- а я прохлопал. Старею :(((
← →
Kara (2005-08-04 12:20) [15]Ох, черт! Я извиняюсь за причиненное беспокойство. Всем огромное спасибо. Tof раз примите мои извинения.
← →
DiamondShark © (2005-08-04 12:20) [16]
> ANB © (04.08.05 12:17) [14]
А там нефиг было хлопать. Вся информация содержится в сообщении об ошибке.
Отсчитал в тексте команды десятый параметр, и посмотрел вокруг него.
Сервер не обманул: ошибка действительно near.
А весь остальной код и смотреть не надо.
Страницы: 1 вся ветка
Текущий архив: 2005.08.21;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.04 c