Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];

Вниз

Не видит параметров 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.014 c
15-1148454413
boriskb
2006-05-24 11:06
2006.06.18
Кто он?


2-1148988526
Steep
2006-05-30 15:28
2006.06.18
Запук с дополнительными параметрами


2-1148957631
verybadbug
2006-05-30 06:53
2006.06.18
загрузка данных в webbrowser


15-1148574620
Nic
2006-05-25 20:30
2006.06.18
P4 TITAN GA-8LD533 Series Intel 845GL - проблемы :(


2-1149186755
Mr tray
2006-06-01 22:32
2006.06.18
Dll не видит функции юнита





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский