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

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

Странно первый раз добавляеться а потом уже не хочет :(( [D6, IB6.x]


Till ©   (2003-05-20 13:51:00) 

Использую TIBQuery для вставки данных в таблицу InterBase, глюк заметил первая запись втсавляеться нормально, а потм когда меняю значения в полях запись больше не вставляеться говорит
Dynamic SQL Error
SQL error code = -104
Token unknow - line 2, char 1
INSERT.

Вообщем вот так....
Код для обработки кнопки вот...
procedure Tusers.BitBtn1Click(Sender: TObject);
var
sql,l,p,f,m : String;
begin
if (login.text = "") or (fio.text = "") or (pass.text = "") or (mode.ItemIndex = -1)
then
begin
ShowMessage("Одно из полей пустое либо вы не выбрали права доступа для данного пользователя!");
end
else
begin
l := login.Text;
p := pass.Text;
f := fio.Text;
m := mode.Text;
sql := "INSERT INTO KOM_USERS (K_FIO,K_LOGIN,K_MODE,K_PASSWD) values (:f,:l,:m,:p)";
AddQuery.SQL.Add(sql);
AddQuery.ParamByName("f").AsString := f;
AddQuery.ParamByName("l").AsString := l;
AddQuery.ParamByName("m").AsString := m;
AddQuery.ParamByName("p").AsString := p;
AddQuery.ExecSQL;
if UserTable.Active then
UserTable.Refresh;
end;
end;

Подскажите плиз где ошибся, буду благодарен
Заранее спасибО!


Basic   (2003-05-21 00:23:00) [1]

>Till © (20.05.03 15:02)
>ой я баран про транзакцию забыл....... болбес... извиняйте :))

любишь ты себя шибко


Соловьев   (2003-05-20 17:02:00) [2]

2 Till ©
только заметил, я там не правильно сопоставил параметры
Соловьев © (20.05.03 14:21), думаю разберешся...


Zacho   (2003-05-20 16:52:00) [3]


> Till © (20.05.03 15:02)

Ничего страшного, все когда-то начинали :-)
Удачи !


Till   (2003-05-20 15:02:00) [4]


> Соловьев © (20.05.03 14:58)
> полный код, и выставлена транзакция и бд у IBQuery?

ой я баран про транзакцию забыл....... болбес... извиняйте :))


Соловьев   (2003-05-20 14:58:00) [5]

полный код, и выставлена транзакция и бд у IBQuery?


Till   (2003-05-20 14:41:00) [6]


> Соловьев © (20.05.03 14:21)
> Это надо в дизайн-тайме занести:
> sql := "INSERT INTO KOM_USERS (K_FIO,K_LOGIN,K_MODE,K_PASSWD)
> values (:f,:l,:m,:p)"
> А это в коде программы:
> if AddQuery.Active then AddQuery.Close;
> AddQuery.ParamByName("f").AsString := login.Text;
> AddQuery.ParamByName("l").AsString := pass.Text;
> AddQuery.ParamByName("m").AsString := fio.Text;
> AddQuery.ParamByName("p").AsString := mode.Text;
> if not AddQuery.Prepared then AddQuery.Prepare;
> AddQuery.ExecSQL;

Сделал так как вы написали, теперь у меня не чего не добавляеться говори тDatabase not assigned, я уже делал с использованием TIBSQL, не идет :((


AlexSerp   (2003-05-20 14:21:00) [7]

И если уж в ран-тайм формируешь текст и знаешь тут же значения параметров, то и пиши их в текст сразу.


Соловьев   (2003-05-20 14:21:00) [8]

Это надо в дизайн-тайме занести:
sql := "INSERT INTO KOM_USERS (K_FIO,K_LOGIN,K_MODE,K_PASSWD) values (:f,:l,:m,:p)"
А это в коде программы:
if AddQuery.Active then AddQuery.Close;
AddQuery.ParamByName("f").AsString := login.Text;
AddQuery.ParamByName("l").AsString := pass.Text;
AddQuery.ParamByName("m").AsString := fio.Text;
AddQuery.ParamByName("p").AsString := mode.Text;
if not AddQuery.Prepared then AddQuery.Prepare;
AddQuery.ExecSQL;


Zacho   (2003-05-20 14:16:00) [9]


> Till © (20.05.03 14:12)

Лучше так: один раз (в design-time или в run-time) прописываешь парметризированный запрос, а потом только присваиваешь значения параметрам.


Till   (2003-05-20 14:12:00) [10]


> Соловьев © (20.05.03 14:06)
>
> > Till © (20.05.03 13:51)
>
> странное использование параметризированных запросов

Чего странного? Я начинающий поэтому так юзаю! Если скажите как лучше буду делать так!


Till   (2003-05-20 14:11:00) [11]


> Ошибка - перед AddQuery.SQL.Add(sql); надо сделать AddQuery.SQL.Clear;
> Совет: не стоит использовать для этого TIBQuery - есть специальный
> компонент TIBSQL.

Ок пасибо теперя увидел :)))))))))
Спасибо за помощь и совет последую ему!


Соловьев   (2003-05-20 14:06:00) [12]


> Till © (20.05.03 13:51)

странное использование параметризированных запросов...


Zacho   (2003-05-20 13:59:00) [13]

Ошибка - перед AddQuery.SQL.Add(sql); надо сделать AddQuery.SQL.Clear;
Совет: не стоит использовать для этого TIBQuery - есть специальный компонент TIBSQL.


Наверх

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