Текущий архив: 2006.06.18;
Скачать: CL | DM;
ВнизНе видит параметров SQL запроса Найти похожие ветки
← →
DevilDevil © (2006-04-16 23:42) [0]Необходимо вставить новую запись. Заполняю InsertSQL:
INSERT INTO Licenses (Company, MachineID, History)
VALUES (:Company, 1234567, :History)
Проблема с параметрами. Т.е. я создаю и настраиваю параметры Company, MachineID, ...
Однако эти параметры не заносятся в таблицу, заносятся только явно указанные. В этом примере - MachineID. Делаю так:
with Query do begin
//Prepare;
ParamByName("Company").AsString := Company;
//ParamByName("MachineID").AsInteger := MachineID;
ParamByName("History").Assign(History);
Insert;
Post;
Close;
ExecSQL;// обновляю данные в гриде
end;
Почему?
P.S. Я использую компоненты IB Objects
← →
ЮЮ © (2006-04-17 03:25) [1]
> Заполняю InsertSQL:
>
> INSERT INTO Licenses (Company, MachineID, History)
> VALUES (:Company, 1234567, :History)
Должно быть :MachineID
with Query do begin
//Prepare;
ParamByName("Company").AsString := Company;
//ParamByName("MachineID").AsInteger := MachineID;
ParamByName("History").Assign(History);
Insert;
Post;
Close;
ExecSQL;// обновляю данные в гриде
end;
Всё смешалось в доме Облонских
Надо
Query.Insert;
Query.Fields[0].asInteger := Company;
...
Query.Post;
В этом случае:
1) Запись добавится в НД (Query), отображаемый в гриде, ничего переоткрывать не надо.
2) На сервер отправится запрос из InsertSQL. Параметры проставит сам компонент.
← →
DevilDevil © (2006-04-17 10:39) [2]
> ЮЮ © (17.04.06 03:25) [1]
В IB Object есть несколько SQL свойств: InsertSQL, EditSQL, DeleteSQL и SQL. Соответственно, первый запрос выпольняется при Insert, второй - вроде при Update или Edit, третий - при Delete, последний - при ExecSQL. По этому методу у меня вся таблица отображается снова
← →
ЮЮ © (2006-04-17 11:39) [3]Query.ParamByName("Company").AsString := Company;
Query.Insert;
Ну и какой смысл 1-го предложения, особенно в контексте 2-го?
Откуда вообще параметры у Query?
что за текст в Query.SQL;
P/S/ Вместо того, чтобы огрызаться [2], почему не попробывать предлагаемое решение?
← →
Johnmen © (2006-04-17 12:10) [4]Ему не пробовать надо, а букварь читать...:)
← →
DevilDevil © (2006-04-17 12:46) [5]> ЮЮ © (17.04.06 11:39) [3]
> Ну и какой смысл 1-го предложения, особенно в контексте 2-го?
Company - строковая переменная
> что за текст в Query.SQL;
select * from LICENSES
ORDER BY Company
> почему не попробывать предлагаемое решение?
попробовал, резудьтат только хуже - в гриде не обновляются изменения
> Должно быть :MachineID
В базе это поле - NOT NULL, если указывать как параметр, то возникает ошибка. А если так, то заполняется только оно (впрочем, я это уже писал)
> Ему не пробовать надо, а букварь читать...:)
А это уже грубость
← →
Виталий Панасенко (2006-04-17 13:07) [6]
> > Ему не пробовать надо, а букварь читать...:)
> А это уже грубость
Это не грубость. А жестокая правда... Ты, судя из приведенного примера, не имеешь ни малейшего представления, как IBObjects работают. Все эти св-ва 9INsertSQL/UpdateSQL/DeleteSQL) предназначены для того, что бы не выдумать то, что ты тут нам показал. А работать "номально", стандартными методами TDataSet: Insert/Post, Delete, Refresh, Edit/Post
← →
RomanH © (2006-04-17 13:49) [7]Послушайся мастеров TDataset-отличная вешь, пишешь IBDataSet.Append а получается insert into/пишешь IBDataSet.Delete получается delete from.
После того как я прочитал про IBDataSet все IBQuery переделал на IBDataset.
← →
DevilDevil © (2006-04-17 18:58) [8]> Виталий Панасенко (17.04.06 13:07) [6]
Если все это аналогично таким же св-вам в FIBPl\us, то гонишь уже ты..
Код должен выглядеть примерно так:
Добавление
Query.Append;
Query.FieldByName("COMPANY").AsString := Company;
Query.FieldByName("MachineID").AsInteger := MachineID;
Query.FieldByName("History").Assign(History);
Query.Post;
Для удаления:
Query.Delete;
И не завбыть подтвердить транзакцию
Виталий, ты в одной ветке грубишь, во второй помогаешь. Но, всё равно, спасибо! Сделал как ты сказал, всё сработало без проблем. Однако для удаления вроде всё таки надо заполнять DeleteSQL. А как быть с Edit? Там же надо указывать, какую запись изменяешь. У меня будет ключ ID : integer
← →
Sergey13 © (2006-04-18 09:05) [9]2 [8] DevilDevil © (17.04.06 18:58)
>Сделал как ты сказал, всё сработало без проблем. Однако для удаления вроде всё таки надо заполнять DeleteSQL. А как быть с Edit?
Че-то сделал, но сути ты так и не понял.
У IBDataSet есть свойства, в которые записываются (полуавтоматически, по правой кнопке на компоненте) SQL запросы, которые будут срабатывать автоматически когда ты вызовешь соответствующий метод датасета Append, Edit, Delete или Refresh. Их (запросы-свойства) надо просто правильно заполнить - указать ключевые и изменяемые записи и сгенерировать сами запросы.
Все это описано в делфовом хелпе, который рекомендуется читать.
← →
Виталий Панасенко (2006-04-18 09:19) [10]
> DevilDevil © (17.04.06 18:58) [8]
> Виталий, ты в одной ветке грубишь, во второй помогаешь.
И где я тут нагрубил?! Я укзал, что ты не имеешь представления о том, на чем пишешь код. Точнее, о том, как все это работает. И это, похоже, правда.. И все. Нельзя сразу в кодировку кидаться, не выяснив, "как управлять автомобилем". Так можно такого "на пороть":-)
← →
DevilDevil © (2006-04-18 22:33) [11]> У IBDataSet есть свойства
Да не IBDataSet я использую, а IBOQuery из палитры IB Objects и другого использовать не могу. Была бы моя воля, я бы сделал всё под IBX или хотя бы с IBOTable (предыдущая версия, кстати, такая). Ну хорошо, удалить (с заполнением DeleteSQL) и добавить(без заполнения InsertSQL и параметров) записи, я могу. А как быть с Edit?
А по поводу имею/не имею представление, всё достаточно просто. Но и в таких простых вещах иногда возникают ошибки., которые, кстати, вы тоже пока не смогли "исправить" - приводимый пример (с параметрами) по прежнему не работает
Подскажите, как быть с Edit?
← →
Sergey13 © (2006-04-19 09:07) [12]2 [11] DevilDevil © (18.04.06 22:33)
>Но и в таких простых вещах иногда возникают ошибки., которые, кстати, вы тоже пока не смогли "исправить"
Это уже наглость, ИМХО. 8-)
← →
Виталий Панасенко (2006-04-19 09:13) [13]
> DevilDevil © (18.04.06 22:33) [11]
> А как быть с Edit?
Для этого существует(должно) UpdateSQL. К сожаленияю(или радости) я использую FIBPlus, а не компоненты Дж.Вартона(они ?), на все 100% гарантий не дам.:-)). Но, я думаю, идея та же...
← →
DevilDevil © (2006-04-19 19:25) [14]> Sergey13 © (19.04.06 09:07) [12]
Сергей, без обид. Я имею ввиду, приведённый вами код не работает
> Виталий Панасенко (19.04.06 09:13) [13]
Так вот я, собственно, и спрашиваю, как это можно сделать (пусть и FIBPlus)? Но там EditSQL
← →
atruhin © (2006-04-20 05:17) [15]
> Добавление
> Query.Append;
> Query.FieldByName("COMPANY").AsString := Company;
> Query.FieldByName("MachineID").AsInteger := MachineID;
> Query.FieldByName("History").Assign(History);
> Query.Post;
> Для удаления:
> Query.Delete;
Ты врешь! В FIB у Query нет методов Append, Post, Delete
← →
ЮЮ © (2006-04-20 06:41) [16]>Ты врешь!
Я тоже "врал", наивно полагая, что FIB DataSet-ы унаследованы от TDataSet, у которго это public методы.
Но если FIB-ы пошли другим путем, удивительно, отчего их так хвалят
← →
Виталий Панасенко (2006-04-20 10:13) [17]
> atruhin © (20.04.06 05:17) [15]
> Ты врешь! В FIB у Query нет методов Append, Post, Delete
я не вру. От того, что человек назвал обьект Query, а не pFIBDataSet, к примеру - какая разница, если это на самомо деле DataSet. А вот на счет pFIBQuery - они НЕ унаследованы от TDataSet. Потому не могут использоваться в визуализации данных. Но с данными манипудировать умеют аж бегом!..
> > Виталий Панасенко (19.04.06 09:13) [13]
> Так вот я, собственно, и спрашиваю, как это можно сделать
> (пусть и FIBPlus)? Но там EditSQL
Где это "там" ? если я правильно догадался, то в IBObjects. и, если опять догадался, значит, EditSQL=UpdateSQL из FIBPlus. значит его нужно заполнить
Синтаксис из FIBPlus
update table
set field1=:field1, field2=:field2,..., fieldN=:fieldN
where ID=:OLD_ID
При этом в связке
Edit;
...
FieldByName("FieldName").As..:=Value;
...
Post;
после Post выполнен этот запрос на изменение данных
← →
Johnmen © (2006-04-20 10:29) [18]FIB DataSet-ы унаследованы-таки от TDataSet.
← →
atruhin © (2006-04-20 19:21) [19]
> От того, что человек назвал обьект Query, а не pFIBDataSet,
> к примеру - какая разница, если это на самомо деле DataSet.
С таким же успехом я могу задать вопрос о датасете, назвав его Edit1 а потом сказать: какая разница. По моему всеми подрозумевается, что имя компонента совподает с типом, если не сказано обратное.
Страницы: 1 вся ветка
Текущий архив: 2006.06.18;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.013 c