Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Проблема с добавлением в Interbase


Автор: ShamanVoodoo 31.3.2008, 06:49
Есть вот такой код:
Код

 SQLQuery1.Close;
 SQLQuery1.SQL.Clear;
 SQLQuery1.SQL.Add('INSERT INTO TERMIN (NAME_TERM,MIN_TERM,MAX_TERM)VALUES(:tname,:tmin,:tmax)');
 SQLQuery1.Params[0].Name:='tname';
 SQLQuery1.Params[1].Name:='tmin';
 SQLQuery1.Params[2].Name:='tmax';
 SQLQuery1.Params[0].AsString:=Edit1.Text;
 SQLQuery1.Params[1].AsFloat:=strtofloat(Edit2.Text);
 SQLQuery1.Params[2].AsFloat:=strtofloat(Edit3.Text);
 SQLQuery1.ExecSQL;


проблема в том, что при вводе русского текста в Edit1.Text возникает ошибка(при вводе англоязычного текста все ок):
http://ipicture.ru/uploads/080331/6BcANd4dIW.gif

InterBase 6.5 \ Кодировка Win1251 \ SQL DIALECT 3
Код

CREATE TABLE TERMIN (
    ID_TERM    INTEGER NOT NULL,
    MIN_TERM   DECIMAL(15,2),
    MAX_TERM   DECIMAL(15,2),
    NAME_TERM  VARCHAR(100)
);

Автор: ShamanVoodoo 31.3.2008, 07:29
 smile  сам разобрался, ну может у кого та же проблема возникнет...
В общем надо в параметрах SQLConnection задать ServerCharSet=WIN1251

Автор: Akella 31.3.2008, 08:22
а разве нельзя заменить это всё:
Код

 SQLQuery1.Params[0].Name:='tname';
 SQLQuery1.Params[1].Name:='tmin';
 SQLQuery1.Params[2].Name:='tmax';
 SQLQuery1.Params[0].AsString:=Edit1.Text;
 SQLQuery1.Params[1].AsFloat:=strtofloat(Edit2.Text);
 SQLQuery1.Params[2].AsFloat:=strtofloat(Edit3.Text);


на
Код

 SQLQuery1.Params[0].Value:=Edit1.Text;
 SQLQuery1.Params[1].Value:=strtofloat(Edit2.Text);
 SQLQuery1.Params[2].Value:=strtofloat(Edit3.Text);

Автор: ShamanVoodoo 31.3.2008, 13:43
а как потом их в текст запроса вносить? :0, :1, :2?

Автор: Rodman 31.3.2008, 14:20
они уже у тебя в запросе должны быть написаны!
а по номеру к ним обращаешься!

Автор: Akella 1.4.2008, 10:40
Цитата(ShamanVoodoo @  31.3.2008,  13:43 Найти цитируемый пост)
а как потом их в текст запроса вносить? :0, :1, :2? 


Цитата(Rodman @  31.3.2008,  14:20 Найти цитируемый пост)
они уже у тебя в запросе должны быть написаны!

почему должны? уже ж ведь написаны:

Цитата(ShamanVoodoo @  31.3.2008,  06:49 Найти цитируемый пост)
SQLQuery1.SQL.Add('INSERT INTO TERMIN (NAME_TERM,MIN_TERM,MAX_TERM)VALUES(:tname,:tmin,:tmax)');


Автор: Fighter 2.4.2008, 17:30
Я не знаю, мож при работе с Interbase свои причуды, но если я пишу что-то наподобие:
Код

select * from my_Table
where id_my_Table = idmt


То, в данном случае idmt - Это будет параметр. Т.е. нужно просто написать незнакомый идентификатор. 

Автор: Zmitro 3.4.2008, 08:08
Цитата(Fighter @ 2.4.2008,  17:30)
Я не знаю, мож при работе с Interbase свои причуды, но если я пишу что-то наподобие:
Код

select * from my_Table
where id_my_Table = idmt


То, в данном случае idmt - Это будет параметр. Т.е. нужно просто написать незнакомый идентификатор.

where id_my_Table = :idmt

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)