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

Вниз

Вставка записи в бд   Найти похожие ветки 

 
Staraya   (2003-03-16 21:42) [0]

Здравствуйте! Я совсем недавно начала изучать программирование бд клиент-сервер. Мне нужно вставить запись в таблицу. На форме располагаются компоненты DataSourse1, dataBase1,query1,edit1,edit2 и кнопочка "Записать".Для того чтоб вставить запись я должна написать в свойстве sql компонента query1 "insert into Имя_Табл...values(список знач)". Я одного не пойму, зачем такие сложности, обычный юзер не знает язык sql, он должен их вводить в поля edit1,edit2. А как это реализовать я не могу разобраться. Может кому-то этот вопрос покажется не достойным внимания, но очень прошу помочь.


 
Sergey Masloff   (2003-03-16 22:31) [1]

Посмотрите примеры из поставки Delphi (каталог Demos/Db)


 
Anatoly Podgoretsky   (2003-03-16 23:13) [2]

Зачем, это ты напиши в программе, а в edit1, edit2 только данные для вставки.


 
alex55   (2003-03-16 23:46) [3]

Начни с того, что вместо TQuery используй TTable, а вместо TEdit - TDBEdit. А кнопочкой "Записать"
выполни TTable.Post. Если очень хочется использовать TQuery - позаботься, чтоб он был "живым"
(TQuery.RequestLive). А конечному user"у не то чтобы не надо знать SQL, но и о его существовании
он может не подозревать.


 
HSolo   (2003-03-17 10:28) [4]

А вот этого:
"вместо TQuery используй TTable"
делать не надо


 
Desdechado   (2003-03-17 10:35) [5]

1. TTable и SQL-сервер - мертворожденное дитя :)
2. ТQuery не обязательно живой должен быть, можно и CachedUpdates использовать
3. команду INSERT INTO можно формировать прямо в коде, подставляя параметры в нее из Edit"ов


 
msguns   (2003-03-17 12:22) [6]

>Desdechado © (17.03.03 10:35)

Я вот тоже разбираюсь с этой фигней (вставкой/изменением) и хочу делать это через TIBDataSet (InsertSQL, UpdateSQL и т.д.). Формирую эти запросы ручками, а потом Insert и Post, а после этого еще и Locate, чтоб стала активной. Так вот как мне использовать параметры в этих запросах, я так и не разобрался (Params ведь для Select ?). Во всех книгах, что у меня есть, приводятся примеры либо с BDE - компонентами (Тексейра), либо через TIBSQL/TIBQuery (Самплы Борланда + Фаронов), либо FIBPlas (Ковязин).
Если не трудно, объясните дуракам поподробнее именно с TIBDataSet (мне он интуитивно кажется самым интересным)


 
Johnmen   (2003-03-17 12:33) [7]

> ms guns ©

Серёга, ты чего измельчал то ? :)))

По вопросу :
Значения параметров берутся автоматически из значений соответствующих полей записи НД.
Напр. :tratata - подставляется значение поля tratata
Также из полей записи НД, на который м.б.установлен DataSource
Также можно руками прописать значение параметра...


 
zacho   (2003-03-17 12:34) [8]

Примеры для FIBPlus отлично подойдут и для IBX, и то, и другое, родилось из FIBC. Естественно, те примеры, где не используются спецефические возможности FIB+
Параметры можно использовать не только в SelectSQL, но и в InsertSQL, ModifySQL, DeleteSQL, RefreshSQL.
Вот простой пример:
Предположим, есть таблица MYTABLE с полями ID - первичный ключ и NAME varchar. SelectSQL выглядит так: SELECT ID,NAME FROM MYTABLE
Тогда:
DeleteSQL: DELETE FROM MYTABLE WHERE ID=?ID
ModifySQL: UPDATE MYTABLE SET NAME=?NAME WHERE ID=?ID
InsertSQL: INSERT INTO MYTABLE (ID,NAME) VALUES(?ID,?NAME)
Если ID может изменяться, то ModifySQL толжен быть таким UPDATE MYTABLE SET ID=?ID, NAME=?NAME WHERE ID=?OLD_ID


 
Anatoly Podgoretsky   (2003-03-17 12:36) [9]

alex55 © (16.03.03 23:46)
Лучше выдумать не мог "вместо TQuery используй TTable"

С какой стати ты приплел сюда "чтоб он был "живым" это для INSERT INTO то

"А конечному user"у не то чтобы не надо знать SQL" пользователю конечно ни к чему, а вот тебе не помешает.




 
MsGuns   (2003-03-17 13:06) [10]

>Johnmen © (17.03.03 12:33)
>Серёга, ты чего измельчал то ? :)))

Это не я измельчал - задрал наш Proxi, уже обещал мордель шефу этой гнилой конторы начистить, ведро водяры проставить, жену его ... во всех позициях - ничего не помогает - инет как был хреновый, так и остается. По 7 раз надо набирать чтоб хоть что-то отправить,- нетрудно и ник свой не так набрать.



 
MsGuns   (2003-03-17 13:09) [11]

>zacho © (17.03.03 12:34)

Спасибо за столь подробный ответ. Но вот еще: разница между ":" и "?". В литературе есть и так, и так. Насколько я понял, вообще-то стандарт - это ":", а вопрос - это "мулька" IB ? Так что надо писать - без разницы для IB ?


 
zacho   (2003-03-17 13:15) [12]


> MsGuns © (17.03.03 13:09)

Насколько знаю, без разницы.


 
Johnmen   (2003-03-17 13:16) [13]

? обозначение параметра в FIBPlus, но можно и :
Для IBX :


 
MsGuns   (2003-03-17 13:22) [14]

>zacho © (17.03.03 13:15)
>Johnmen © (17.03.03 13:16)

Спасиба, пачаны, счас спробую ;))

PS Жень, я тебя вообще-то уже записал в свои учителя ;)) Ты не очень возражаешь ?
PPS (хотя кто тебя будет спрашивать ;)))))




 
zacho   (2003-03-17 13:22) [15]


> Johnmen © (17.03.03 13:16)

В IBX работает как :, так и ?


 
Staraya   (2003-03-17 13:29) [16]

> Desdechado
Моя проблема именно в том, что я не знаю как подставлять параметры из edit"ов. Если не очень Вас затруднит, объясните мне пожалуйста


 
Johnmen   (2003-03-17 13:36) [17]

>MsGuns © (17.03.03 13:22)

Возражаю ! :) Но помогать буду, если смогу... :))))

>zacho © (17.03.03 13:22)

Возможно. Я не проверял...


 
zacho   (2003-03-17 13:48) [18]


> Staraya (17.03.03 13:29)

Если именно параметры, то примерно так: DataSet.ParamByName("MY_PARAM").AsString=Edit.text
P.S. Настоятельно советую не использовать BDE. Лучше IBX(входит в поставку Дельфи) или FIBPlus,IBO(нужно покупать отдельно)


 
myor   (2003-03-17 13:50) [19]

Staraya (17.03.03 13:29)

я бы написал хп на вставку (в ibconsole)
...
procedure table1_insert(field1 char(15), field2 integer)
...
insert into table1(field1, field2)
values (:field1, :field2)
...
а потом (в проге):
...
with ibstoredproc1 do begin
prepare;
params[0].asstring:=edit1.text;
params[1].asinteger:=edit2.text;
...
execproc;
end;


 
MsGuns   (2003-03-17 13:53) [20]

>Johnmen © (17.03.03 13:36
>Возражаю ! :) Но помогать буду, если смогу... :))))

Звонок в дверь к молодоженам. Открывают оба.
Стоит мужик и говорит:
- Создается клуб группового секса. Если не против, я вас туда запишу.
Молодые переглянулись и промолчали.
- Хорошо, я вас записываю.
Тут молодой муж :
- А сколько человек в этом клубе ?
- Пока трое: вы двое и я.
- Тогда я против !
- Ладно, тебя вычеркиваю !





 
zacho   (2003-03-17 13:54) [21]


> myor © (17.03.03 13:50)

IMHO, для вставки одной записи в таблицу, ХП - явное излишество.
Да и не дает никаких преимуществ перед тем же самым INSERT в TIBSql

> Johnmen © (17.03.03 13:36)

Я проверял, работает :-)


 
MsGuns   (2003-03-17 13:57) [22]

>Johnmen © (17.03.03 13:36
>Возражаю ! :) Но помогать буду, если смогу... :))))

Звонок в дверь к молодоженам. Открывают оба.
Стоит мужик и говорит:
- Создается клуб группового секса. Если не против, я вас туда запишу.
Молодые переглянулись и промолчали.
- Хорошо, я вас записываю.
Тут молодой муж :
- А сколько человек в этом клубе ?
- Пока трое: вы двое и я.
- Тогда я против !
- Ладно, тебя вычеркиваю !





 
myor   (2003-03-17 13:59) [23]

zacho © (17.03.03 13:54)
а где сказано, что запись одна?
имхо, для одной записи, таблица (бд)- явное излишество. :)
или, имеется в виду, вставка одной записи за одиу операцию insert?


 
zacho   (2003-03-17 14:06) [24]


> myor © (17.03.03 13:59)
> или, имеется в виду, вставка одной записи за одиу операцию
> insert?

Ага. Насколько я понял, исходный вопрос касался все-таки одной записи, а не нескольких сразу.


 
myor   (2003-03-17 14:12) [25]

да ради бога, вариантов куча. можно хоть через table1.appendrecord([edit1.text, edit2.text]).


 
Staraya   (2003-03-17 14:29) [26]

У меня в программе должен быть документ "Поступление материалов". Пользователь вводит в поля edit1,edit2 значения, которые соответствуют полям "invent"и "kol_vo"в таблице detal удаленной базы, а потом нажимает на кнопочку "Записать".Так вот, я никак не могу реализовать, чтобы вводимые данные записывались в таблицу detal. Уже совсем запуталась. Подскажите пожалуйста оптимальное решение


 
Соловьев   (2003-03-17 14:38) [27]


> я никак не могу реализовать, чтобы вводимые данные записывались
> в таблицу detal

Query1.SQL:
Insert into table(invert, kol_vo)
values(:pInvert, : pKol_vo)

В проге на событие BtnClick:
...
with Query1 do
begin
Close;
ParamByName("pInvert").AsString{?} := Edit1.Text;
ParamByName("pInvert").AsString{?} := Edit1.Text;
if not Prepared then Prepare;
ExecSQL;
end;
Transaction.CommitReteaning;
...


 
Staraya   (2003-03-17 14:59) [28]

> Соловьев
Спасибо за подробное объяснение и помощь


 
Staraya   (2003-03-17 15:09) [29]

> zacho
Чтобы мне использовать IBX, я должна создать New Package в среде Delphi и инсталлировать компоненты IBX? Или как-то по-другому?Только не понятно где я должна их взять. У меня на компе есть папка Demos\db\ibx, но я не уверена, что это то, что мне нужно.


 
myor   (2003-03-17 15:43) [30]

Staraya (17.03.03 15:09
зачем ibx?
см. Соловьев © (17.03.03 14:38), только там ошибочка:

Query1.SQL:
Insert into table(invert, kol_vo)
values(:pInvert, : pKol_vo)

В проге на событие BtnClick:
...
with Query1 do
begin
Close;
ParamByName("pInvert").AsString{?} := Edit1.Text;
ParamByName(" pkol_vo").AsString{?} := Edit 2.Text;
if not Prepared then Prepare;
ExecSQL;
end;
Transaction.CommitReteaning;
...


используемые компоненты: query и transaction.


 
Соловьев   (2003-03-17 15:47) [31]


> myor © (17.03.03 15:43)

Ошибки сделаны специально, чтобы человек хоть чуть -чуть сам подумал:)))


 
myor   (2003-03-17 15:55) [32]

Соловьев © (17.03.03 15:47)
оригинальная интерпретация принципа "на ошибках учатся". лично мне нравится, но это- на любителя. самому приходилось учитьмся на очепятках в книгах. надо бы ввести этот метод обучение в широкое пользование.
ничто так не стимулирует обучение (познание), как непонимание.


 
Staraya   (2003-03-17 16:15) [33]

> myor
Я нашла только одну ошибку:
ParamByName("pInvert").AsString{?} := Edit1.Text;
ParamByName("pkol_vo").AsString{?} := Edit2.Text;
В данном примере параметр определяется своим именем в тексте запроса(Invert, kol_vo), но не именем в свойстве Name инспектора объектов(pInvert, pKol_vo). А есть еще ошибки?


 
myor   (2003-03-17 16:25) [34]

2 Staraya (17.03.03 16:15)

ParamByName("pInvert").AsString{?} := Edit1.Text;
ParamByName(" pInvert").AsString{?} := Edit 1.Text;
и
ParamByName("pInvert").AsString{?} := Edit1.Text;
ParamByName( "pkol_vo").AsString{?} := Edit 2.Text;

как вставка, работает?



 
Соловьев   (2003-03-17 16:30) [35]


> Insert into table(invert, kol_vo)

:)


 
Staraya   (2003-03-17 16:36) [36]

> myor
Я только что проверила, ввела несколько записей, все работает! И именно тогда, когда имя параметра "pKol_vo", а не "kol_vo", хотя в книжке написано, что первый вариант неправильный, странно


 
Соловьев   (2003-03-17 16:41) [37]

там у Query есть свойство Params - заходи туда и смотри какие у тебя параметры. Там же можно настроить: задать значения и вид.


 
myor   (2003-03-17 16:41) [38]

жизнь вообще странная штука...


 
zacho   (2003-03-17 17:02) [39]


> Staraya (17.03.03 15:09)

Нет,ничего специально делать не нужно, просто в палитре компонентов посмотри закладу Interbase.
Конечно, это зависит от версии Дельфи. В Enterprise точно должно быть, в Personal-нет :-).



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.04.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.008 c
14-6722
Интернетчик
2003-03-16 11:37
2003.04.03
Как подключить клиента к интернет ?


14-6787
Malder
2003-03-16 23:05
2003.04.03
Просмотр DLL


3-6299
SergeN
2003-03-17 08:37
2003.04.03
DBGrid


4-6865
Lex_!
2003-02-03 13:42
2003.04.03
Сообщени е о перерисовки окна..


14-6668
VID
2003-03-17 15:27
2003.04.03
Работа с объектами в Excel





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский