|
#1
|
|||
|
|||
Типы данных
База - 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
|
|||
|
|||
Код:
IBQuery1.SQL.Add('insert into users (USER_ID, FIO) values ('+ IntToStr(id)+', '+QuotedStr(fio)+')'); QuotedStr - функция гарантированно заключает строку в нужные для SQL кавычки (тоже надо делать и со значениями типа ДАТА). Числовые значения должны быть без кавычек. Да, еще. Для выполнения предложения "INSERT" требуется метод ExecSQL, а не Open (IBQuery1.ExecSQL). P.S. Забавное выражение "fio:=id:=Edit2.Text;". Никогда не встречал в Delphi такие конструкции. Естественно, компилятор, дает на нем ошибку. Не забывайте делать резервные копии Последний раз редактировалось san-46, 03.12.2008 в 22:47. |
#3
|
|||
|
|||
Цитата:
fio:=id:=Edit2.Text - опечатался id:=Edit2.Text Если не трудно посоветуйте выход, как вставить нестрочные данные. |
#4
|
|||
|
|||
Именно так как в примере. Если это числовое значение, то оно преобразовывается в строковое представление функциями IntToStr или FloatToStr (FloatToStrF).
Даты, функциями DateToStr (или другими похожими, коих многое количество в Delphi). Желательно не забывать про транзакции. В коде не видно никакого упоминания о них. Если транзакция активизирована до выполнения представленного вами кода, то это плохая практика. Не забывайте делать резервные копии Последний раз редактировалось san-46, 03.12.2008 в 23:22. |
#5
|
|||
|
|||
Цитата:
Спасибо большое Вам за терпение и пояснения...это заслуживает уважения. Еще хотел уточнить один момент, а разве не так правильно (''+IntToStr(id)+'',''+StrQUOTE(fio)+'') . То есть с двумя одинарными ковычками. |
#6
|
|||
|
|||
опять опечаткаспать видно хочу QUOTEStr
|
#7
|
|||
|
|||
Да, нет, двойные одинарные кавычки компилятор просто не пропустит.
К тому же функция QuotedStr именно "одевает" передаваемое значение в нужные кавычки. А ''+IntToStr(id)+'' - это уже нарушение - числовые значения в кавычках быть не должны, при выполнении SQL выражения сервер сгенерит ошибку. Спокойной ночи. Если есть необходимость принимаю вопросы на мыло. Не забывайте делать резервные копии |
#8
|
|||
|
|||
Всего доброго, еще раз спасибо и простите уж за мою неопытность....мыло Ваше записал.
|