Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.12.2008, 21:43
Ishtvan Ishtvan вне форума
Прохожий
 
Регистрация: 20.11.2008
Сообщения: 7
Репутация: 10
По умолчанию Типы данных

База - Firedird 2.0, среда - Delphi7, таблица с полями ID (integer) FIO (varchar). Пытаюсь вставить запись с помощью query:
var
id : integer;
fio : string;
begin

id:=StrToInt(Edit1.Text);
fio:=id:=Edit2.Text;

IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('insert into users (USER_ID, FIO) values (''+id+'',''+fio+'')');
IBQuery1.SQL.Open;

ругается на неправильный тип данных.
Project Project1.exe raised exception class EIBInterBaseError with message 'conversion error from string "+id+"'

Посоветуйте пожалуйста. Заранее благодарен.
Ответить с цитированием
  #2  
Старый 03.12.2008, 22:36
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Код:
IBQuery1.SQL.Add('insert into users (USER_ID, FIO) values ('+
                            IntToStr(id)+', '+QuotedStr(fio)+')');
SQL выражение - это строка, т.е. все значения, входящие в это выражение должны быть представлены в строковом виде.

QuotedStr - функция гарантированно заключает строку в нужные для SQL кавычки (тоже надо делать и со значениями типа ДАТА). Числовые значения должны быть без кавычек.

Да, еще. Для выполнения предложения "INSERT" требуется метод ExecSQL, а не Open (IBQuery1.ExecSQL).

P.S. Забавное выражение "fio:=id:=Edit2.Text;". Никогда не встречал в Delphi такие конструкции. Естественно, компилятор, дает на нем ошибку.
__________________
Не забывайте делать резервные копии

Последний раз редактировалось san-46, 03.12.2008 в 22:47.
Ответить с цитированием
  #3  
Старый 03.12.2008, 22:43
Ishtvan Ishtvan вне форума
Прохожий
 
Регистрация: 20.11.2008
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от san-46
Код:
IBQuery1.SQL.Add('insert into users (USER_ID, FIO) values ('+IntToStr(id)+', '+fio)');
SQL выражение - это строка, т.е. все значения, входящие в это выражение должны быть представлены в строковом виде.

P.S. Забавное выражение "fio:=id:=Edit2.Text;". Никогда не встречал в Delphi такие конструкции. Естественно, компилятор, дает на нем ошибку.

fio:=id:=Edit2.Text - опечатался id:=Edit2.Text
Если не трудно посоветуйте выход, как вставить нестрочные данные.
Ответить с цитированием
  #4  
Старый 03.12.2008, 23:07
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Именно так как в примере. Если это числовое значение, то оно преобразовывается в строковое представление функциями IntToStr или FloatToStr (FloatToStrF).
Даты, функциями DateToStr (или другими похожими, коих многое количество в Delphi).

Желательно не забывать про транзакции. В коде не видно никакого упоминания о них. Если транзакция активизирована до выполнения представленного вами кода, то это плохая практика.
__________________
Не забывайте делать резервные копии

Последний раз редактировалось san-46, 03.12.2008 в 23:22.
Ответить с цитированием
  #5  
Старый 03.12.2008, 23:41
Ishtvan Ishtvan вне форума
Прохожий
 
Регистрация: 20.11.2008
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от san-46
Именно так как в примере. Если это числовое значение, то оно преобразовывается в строковое представление функциями IntToStr или FloatToStr (FloatToStrF).
Даты, функциями DateToStr (или другими похожими, коих многое количество в Delphi).

Желательно не забывать про транзакции. В коде не видно никакого упоминания о них. Если транзакция активизирована до выполнения представленного вами кода, то это плохая практика.

Спасибо большое Вам за терпение и пояснения...это заслуживает уважения. Еще хотел уточнить один момент, а разве не так правильно (''+IntToStr(id)+'',''+StrQUOTE(fio)+'') . То есть с двумя одинарными ковычками.
Ответить с цитированием
  #6  
Старый 03.12.2008, 23:43
Ishtvan Ishtvan вне форума
Прохожий
 
Регистрация: 20.11.2008
Сообщения: 7
Репутация: 10
По умолчанию

опять опечаткаспать видно хочу QUOTEStr
Ответить с цитированием
  #7  
Старый 03.12.2008, 23:48
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Да, нет, двойные одинарные кавычки компилятор просто не пропустит.
К тому же функция QuotedStr именно "одевает" передаваемое значение в нужные кавычки. А ''+IntToStr(id)+'' - это уже нарушение - числовые значения в кавычках быть не должны, при выполнении SQL выражения сервер сгенерит ошибку.

Спокойной ночи. Если есть необходимость принимаю вопросы на мыло.
__________________
Не забывайте делать резервные копии
Ответить с цитированием
  #8  
Старый 03.12.2008, 23:54
Ishtvan Ishtvan вне форума
Прохожий
 
Регистрация: 20.11.2008
Сообщения: 7
Репутация: 10
По умолчанию

Всего доброго, еще раз спасибо и простите уж за мою неопытность....мыло Ваше записал.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:58.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter