![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
IBDataset.ParamByName [D6, IB6.x]
Eduard © (2002-03-20 11:19:00)Здравствуйте, мастаки !
Подскажите, пожалуйста, почему в нижеприведенном коде возникает ошибка "Field "SomeField" not Found . Во-первых, поле такое существует, параметр с таким именем существует, база написана на диалекте 3, все поля и имена таблиц в запросах введены в кавычках.
IBDataSet1.Open;
IBDataSet1.ParamByName("SomeField").AsString := "SomeStringValue";
IBDataSet1.Prepare;
IBDataSet1.Insert;
IBDataSet1.ApplyUpdates;
IBTransaction1.Commit;
IBDataSet1.Open;
Если я что-то упустил, поправьте меня, и я дополню вопрос. Заранее спасибо.
Alexandr (2002-03-21 10:50:00) [1]да, и еще, чтоб было совсем понятно.
свой InsertSQL можешь записать в TIBQuery,
а там уже вызвать запрос на исполнение (execQuery, по-моему), передав ему параметры через ParamByName
Alexandr (2002-03-21 10:46:00) [2]дык, у тебя же кэшированные обновления, поэтому компонент при applyUpdates смотрит, в каких записях изменились значения в твоем датасете и сам запускает соответствующие InsertSQL и UpdateSQL на основе твоих изменений и вставок, и какие параметры туда подставлять датасет сам разбирается.
Eduard (2002-03-21 09:41:00) [3]И все равно я ни черта не понял. Моя цель такова: присвоить значение какого-нибудь Edit.Text параметру :Monitor , затем выполнить InsertSQL, который выглядит как
"INSERT INTO "Monitors" ("Monitors"."Monitor"). То, что Вы мне предлагаете - простое присваивание значения полю.
VALUES (:"Monitor")"
Alexandr (2002-03-20 12:10:00) [4]дык когда к параметру надо обращаться.
а FieldByname кагда к полю. А тебе надо к полю.
Eduard (2002-03-20 12:01:00) [5]Так получилось:
try
IBDataSet1.Open;
IBDataSet1.Insert;
IBDataSet1.FieldByName("Monitor").AsString := "SomeStringValue";
//IBDataSet1.FieldByName("N").AsInteger := N;
IBDataSet1.Post;
IBDataSet1.ApplyUpdates;
IBTransaction1.Commit;
except
IBTransaction1.RollBack;
raise;
end;
IBDataSet1.Open;
А на кой тогда ParamByName ???
Alexandr (2002-03-20 11:54:00) [6]values
(:"N", :"Monitor")
тут кавычки ненадо.
т.е.
values
(:N, :Monitor)
а вот это так надо
try
IBDataSet1.Open;
IBDataSet1.Insert;
IBDataSet1.FieldByName("Monitor").AsString := "SomeStringValue";
IBDataSet1.FieldByName("N").AsInteger := N;
IBDataSet1.Post;
IBDataSet1.ApplyUpdates;
IBTransaction1.Commit;
except
IBTransaction1.RollBack;
raise;
end;
IBDataSet1.Open;
Eduard (2002-03-20 11:45:00) [7]SelectSQL : select "N", "Monitor" from "Monitors"
InsertSQL : insert into "Monitors"
("Monitors"."N", "Monitors"."Monitor")
values
(:"N", :"Monitor")
Этим кодом я хотел вставить строку "SomeStringValue" в таблицу Monitors
Alexandr (2002-03-20 11:33:00) [8]и всетаки в нормальном или в нужном (правильном)?
Eduard (2002-03-20 11:32:00) [9]Написано все в нормальном регистре.
Alexandr (2002-03-20 11:32:00) [10]слушай, напиши, что ты хотел сделать этим кодом.
А то это просто на набор комманд похоже.
А также напиши, что у тебя написано в selectSQL и InsertSQL
OlegE (2002-03-20 11:31:00) [11]Диалект 3 чувствителен к регистру. Проверь какими символами у тебя набрано SomeField. SomeField и SOMEFIELD - для 3 диалекта разные вещи.
Eduard (2002-03-20 11:27:00) [12]Почему бред ?
Alexandr (2002-03-20 11:25:00) [13]бред какой-то написан