Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавление записи в DBGrid при помощи запроса SQL 
:(
    Опции темы
Yagmort
Дата 21.6.2009, 05:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 17.6.2009

Репутация: нет
Всего: -1



Код

procedure TFD_PAC.BitBtn1Click(Sender: TObject);
var
e1: string;
begin
DM.ADOQ_PAC.Close;
DM.ADOQ_PAC.SQL.Clear;
DM.ADOQ_PAC.SQL.Add('INSERT INTO pacient (familiya)');
e1:=DBEdit1.EditText;
DM.ADOQ_PAC.SQL.Add('VALUES (e1)');
//GL_F.DBG_PAC.Columns[0].FieldName:='familiya';\
//DM.ADOQ_PAC.Parameters.ParamByName('fam').Value:=DBEdit1.EditText;

DM.ADOQ_PAC.ExecSQL;
//DM.ADOQ_PAC.Refresh;
end;


У меня на форме есть много DBEdit-ов, 1 DBMemo, 2 DBRichEdit, 1 Datetimepicker.

Вверху я пытался добавить новую "Фамилию" пациента, перепробывал много способов, но чет не получилось, наверное из-за того, что нужно создать в DBGrid -новую строку и чтоб при нажатии на кнопку "добавить", открылась форма с пустыми DBEdit -ами DBMemo итп. 
У меня ситтуация такова, что у меня 1 запись (строка) в таблице (БД) есть и заполнена строка полностью, но когда нажимаю на кнопку "добавить", он не создает новую строку куда и будет добавлятся новая запись,  а пишет в этих DBEdit - ах итп т.е. значения, той записи которые находятся в моей одной записи (строке). 
Посмотрел много всяких пособий и чет подходящего примера не нашел :( надеюсь поможете (всю ночь ковырял коды)...
http://pic.ipicture.ru/uploads/090621/syGraRhEU6.jpg - тут мой шаблон.
PM MAIL   Вверх
former
Дата 21.6.2009, 11:28 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 7
Всего: 17



Во-первых:
Код

procedure TFD_PAC.BitBtn1Click(Sender: TObject);
begin
DM.ADOQ_PAC.Close;
DM.ADOQ_PAC.SQL.Clear;
DM.ADOQ_PAC.SQL.Text:='INSERT INTO pacient (familiya) VALUES (:e1)'; //Параметр должен быть обозначен
DM.ADOQ_PAC.Parameters.ParamByName(':e1').Value:=DBEdit1.EditText;
DM.ADOQ_PAC.ExecSQL;
//Для компонента, осуществляющего select данных, делаем Refresh.
end;


Кроме того, не стоит забывать про обязательные поля, если они есть.

Во-вторых. Зачем использовать DBEdit, если данные заносишь через запрос. Можно обойтись обычным Edit.

Это сообщение отредактировал(а) former - 21.6.2009, 11:30


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Akella
Дата 21.6.2009, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Yagmort @  21.6.2009,  05:38 Найти цитируемый пост)
но когда нажимаю на кнопку "добавить", он не создает новую строку куда и будет добавлятся новая запись, 

А ты подтверждаешь транзакцию?
А ты переоткрываешь НД после добавления записи?

Добавлено через 33 секунды
НД = набор данных, т.е. таблица (TQuery, TTable и т.п.)
PM MAIL   Вверх
Yagmort
Дата 24.6.2009, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 17.6.2009

Репутация: нет
Всего: -1



Цитата(former @ 21.6.2009,  11:28)
Во-первых:
Код

procedure TFD_PAC.BitBtn1Click(Sender: TObject);
begin
DM.ADOQ_PAC.Close;
DM.ADOQ_PAC.SQL.Clear;
DM.ADOQ_PAC.SQL.Text:='INSERT INTO pacient (familiya) VALUES (:e1)'; //Параметр должен быть обозначен
DM.ADOQ_PAC.Parameters.ParamByName(':e1').Value:=DBEdit1.EditText;
DM.ADOQ_PAC.ExecSQL;
//Для компонента, осуществляющего select данных, делаем Refresh.
end;


Кроме того, не стоит забывать про обязательные поля, если они есть.

Во-вторых. Зачем использовать DBEdit, если данные заносишь через запрос. Можно обойтись обычным Edit.

Обязательные поля ? хм... ? ну я так понял обязательным полем является ID - поле или при добавлении все атрибуты таблици должны заполнятся одновременно  ?  
PM MAIL   Вверх
former
Дата 24.6.2009, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 7
Всего: 17



Цитата(Yagmort @  24.6.2009,  20:35 Найти цитируемый пост)
ну я так понял обязательным полем является ID

Обязательными являются те поля, которые при создании таблицы в БД  были обозначены как NOT NULL (т.е. не пустые). Другими словами эти поля должны быть заполнены при добавлении/изменении записи в таблице. Если поле необязательное, то оно может иметь значение NULL.
Автоинкрементные поля (в данном случае ID) должны быть NOT NULL. Тоже самое касается ключей.

Надеюсь достаточно разжевал. smile 

Это сообщение отредактировал(а) former - 24.6.2009, 22:08


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Yagmort
Дата 24.6.2009, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 17.6.2009

Репутация: нет
Всего: -1



Цитата(former @ 24.6.2009,  22:07)
Цитата(Yagmort @  24.6.2009,  20:35 Найти цитируемый пост)
ну я так понял обязательным полем является ID

Обязательными являются те поля, которые при создании таблицы в БД  были обозначены как NOT NULL (т.е. не пустые). Другими словами эти поля должны быть заполнены при добавлении/изменении записи в таблице. Если поле необязательное, то оно может иметь значение NULL.
Автоинкрементные поля (в данном случае ID) должны быть NOT NULL. Тоже самое касается ключей.

Надеюсь достаточно разжевал. smile

я понял а выше код который написан он точно запись добавит ? или там еще есть кое какие ньюансы ?
PM MAIL   Вверх
Akella
Дата 25.6.2009, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Yagmort @  24.6.2009,  20:35 Найти цитируемый пост)
DM.ADOQ_PAC.SQL.Clear;
DM.ADOQ_PAC.SQL.Text

Зачем вызывать Clear, если ты присваиваешь значение!!! Ты же не добавляешь ничего и не отнимаешь!

Добавлено через 1 минуту и 22 секунды
Вот пример.
Код

Var
 a: integer;
begin
a := 0;                                   //какой смысл в этой строке??
a := 2+1;

PM MAIL   Вверх
Yagmort
Дата 25.6.2009, 05:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 17.6.2009

Репутация: нет
Всего: -1



Цитата(Akella @ 25.6.2009,  00:01)
Цитата(Yagmort @  24.6.2009,  20:35 Найти цитируемый пост)
DM.ADOQ_PAC.SQL.Clear;
DM.ADOQ_PAC.SQL.Text

Зачем вызывать Clear, если ты присваиваешь значение!!! Ты же не добавляешь ничего и не отнимаешь!

Добавлено @ 00:03
Вот пример.
Код

Var
 a: integer;
begin
a := 0;                                   //какой смысл в этой строке??
a := 2+1;

Чет я тебя вообще не понял )))))))
PM MAIL   Вверх
Frees
Дата 25.6.2009, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 23
Всего: 54



Цитата(Yagmort @  25.6.2009,  08:49 Найти цитируемый пост)
Чет я тебя вообще не понял )))))))

Clear - лишний, он не имеет смысла 


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Romikgy
Дата 25.6.2009, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 4
Всего: 146



лишний , но и не мешает )))


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
former
Дата 25.6.2009, 11:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 7
Всего: 17



Если уж на то пошло, то:
Код

procedure TFD_PAC.BitBtn1Click(Sender: TObject);
begin
DM.ADOQ_PAC.Close;
DM.ADOQ_PAC.SQL.Text:='INSERT INTO pacient (familiya) VALUES (:e1)';
DM.ADOQ_PAC.Parameters[0].Value:=DBEdit1.EditText;
DM.ADOQ_PAC.ExecSQL;
end;

 smile 


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Yagmort
Дата 26.6.2009, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 17.6.2009

Репутация: нет
Всего: -1



Код

procedure TFD_PAC.BitBtn1Click(Sender: TObject);
var
e1: string;
begin
DM.ADOQ_PAC.Close;
DM.ADOQ_PAC.SQL.Text:='INSERT INTO pacient (familiya) VALUES (:e1)';
DM.ADOQ_PAC.Parameters.ParamByName(':e1').Value:=DBEdit1.EditText;
DM.ADOQ_PAC.Parameters[0].Value:=DBEdit1.EditText;
DM.ADOQ_PAC.ExecSQL;
end;
end.

Короче написал так он мне выдает ошибку:http://pic.ipicture.ru/uploads/090626/6EaSpt8cvC.jpg
Код

procedure TFD_PAC.BitBtn1Click(Sender: TObject);
var
e1: string;
begin
DM.ADOQ_PAC.Close;
DM.ADOQ_PAC.SQL.Text:='INSERT INTO pacient (familiya) VALUES (:e1)';
//DM.ADOQ_PAC.Parameters.ParamByName(':e1').Value:=DBEdit1.EditText;
DM.ADOQ_PAC.Parameters[0].Value:=DBEdit1.EditText;
DM.ADOQ_PAC.ExecSQL;
end;
end.

При таком коде выдает ошибку: http://pic.ipicture.ru/uploads/090626/W4WIKVG2T5.jpg 

У меня компонент ADOQuery используется как для Select, так для Insert, и думаю он будет использоваться для всех таблиц-1 компонент. Если я его буду использовать один ошибок не будет ? Или лучше использовать несколько ?
Как мне сделать так, чтоб он добавил мне в следующую строку, после заполненой -  запись, не получается у меня. :(

Это сообщение отредактировал(а) Yagmort - 26.6.2009, 12:59
PM MAIL   Вверх
Frees
Дата 26.6.2009, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 23
Всего: 54



Код

DM.ADOQ_PAC.SQL.Text:='INSERT INTO pacient (familiya) VALUES (:e1)';
DM.ADOQ_PAC.ParamByName('e1').Value:=DBEdit1.EditText;
DM.ADOQ_PAC.ExecSQL;


Это сообщение отредактировал(а) Frees - 26.6.2009, 13:00


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Yagmort
Дата 26.6.2009, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 17.6.2009

Репутация: нет
Всего: -1



Цитата(Frees @ 26.6.2009,  13:00)
Код

DM.ADOQ_PAC.SQL.Text:='INSERT INTO pacient (familiya) VALUES (:e1)';
DM.ADOQ_PAC.ParamByName('e1').Value:=DBEdit1.EditText;
DM.ADOQ_PAC.ExecSQL;

http://pic.ipicture.ru/uploads/090626/6EaSpt8cvC.jpg - выдает эту ошибку (

когда я че нить вписываю в DBEdit1 - я вижу как он меняет мое единственное значения в столбце Фамилия, на то которое ввел, при нажатии на BitBtn1Click  ошибка - http://pic.ipicture.ru/uploads/090626/6EaSpt8cvC.jpg

Это сообщение отредактировал(а) Yagmort - 26.6.2009, 13:21
PM MAIL   Вверх
Frees
Дата 26.6.2009, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 23
Всего: 54



в BitBtn1Click 
пиши 
Код

DBEdit1.DataSource.dataset.post


Добавлено @ 13:26
Цитата(Yagmort @  26.6.2009,  16:05 Найти цитируемый пост)
http://pic.ipicture.ru/uploads/090626/6EaSpt8cvC.jpg - выдает эту ошибку (


дак ты в ParamByName напиши не ':e1' а 'e1'!!

Добавлено @ 13:32
Цитата(Yagmort @  26.6.2009,  15:57 Найти цитируемый пост)
При таком коде выдает ошибку: http://pic.ipicture.ru/uploads/090626/W4WIKVG2T5.jpg 

поправь
Код

procedure TFD_PAC.BitBtn1Click(Sender: TObject);
begin
DM.ADOQ_PAC.Close;
DM.ADOQ_PAC.SQL.Text:='INSERT INTO pacient (familiya, pol) VALUES (:e1, 0)';
DM.ADOQ_PAC.Parameters[0].Value:=DBEdit1.EditText;
DM.ADOQ_PAC.ExecSQL;
end;
end.


Это сообщение отредактировал(а) Frees - 26.6.2009, 13:32


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0589 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.