Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
3-1121063866
Catik
2005-07-11 10:37
2005.08.21
Как проверить наличие таблицы в БД ?


14-1122465564
ПЛОВ
2005-07-27 15:59
2005.08.21
Вопрос по шахматам


6-1116004614
Lela
2005-05-13 21:16
2005.08.21
Прием и отображение информации. Протокол HTTP


1-1122394424
Logan
2005-07-26 20:13
2005.08.21
Как сделать чтобы при загрузке текста в ричидит, текст не менялся


1-1122623099
Mishenka
2005-07-29 11:44
2005.08.21
Как в ListView запретить вручную изменять ширину столбцов?