Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2014, 22:17   #1
nata-khramenkova
 
Регистрация: 08.12.2013
Сообщений: 4
Печаль БД в Delphi

Здравствуйте. Есть три таблицы сделанные в interbase.
Код:
CREATE TABLE CLIENTS
(
ID_CLIENT INTEGER NOT NULL  PRIMARY KEY,
C_F_I_O VARCHAR (50) NOT NULL,
DOCUMENT VARCHAR (25) NOT NULL,
SERIA_NUMBER VARCHAR (25) NOT NULL,
DATA_ROJDENIA DATE NOT NULL,
CONTACTS VARCHAR (200) NOT NULL
);

CREATE TABLE PERSONALS
(
ID_PERSONAL INTEGER NOT NULL PRIMARY KEY,
P_F_I_O VARCHAR (50) NOT NULL,
TELEPHONE VARCHAR (20) NOT NULL,
DOLJNOST VARCHAR (50) NOT NULL
);


CREATE TABLE DOGOVOR
(
ID_DOGOVOR INTEGER NOT NULL PRIMARY KEY,
STRAHOVSHCHIK VARCHAR (50) NOT NULL,
ID_CLIENT INTEGER NOT NULL,
ID_PERSONAL INTEGER NOT NULL,
STRAHOVAYA_SUMMA NUMERIC (10,2) NOT NULL,
STRAHOVOI_VZNOS NUMERIC (10,2) NOT NULL,
STRAHOVAYA_VIPLATA NUMERIC (10,2),
DATA_START DATE NOT NULL,
DATA_END DATE NOT NULL,
PERIOD INTEGER NOT NULL,
COMMENT VARCHAR (200)
);
Скажите пожалуйста, как вставить все записи insert'ом в таблицу договор, еще не создавая записи в таблице клиент, тоесть как то одновременно чтоли. Или в ib console это получится только поочередно вручную? вбивая id ключи?

А еще в приложении, таблица договор должна заполняться через форму "новый договор" с полями для ввода текста, и комбобоксами (для персонала) как там тогда это организовать?
Я совсем что то ничего не пойму, полазив по форуму состряпала вот такой код для кнопочки "Добавить клиента" это:
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
   with IBQuery1 do begin
   sql.text:='insert into clients (c_f_i_o, document, seria_number, data_rojdenia, contacts) values (:c_f_i_o, :document, :seria_number, :data_rojdenia, :contacts)';
   with IBQuery1.Params do
begin
   IBQuery1.ParamByName('c_f_i_o').Value:= edit1.text;
   IBQuery1.ParamByName('document').Value:= edit2.text;
   IBQuery1.ParamByName('seria_number').Value:= edit3.text;
   IBQuery1.ParamByName('data_rojdenia').Value:= edit4.text;
   IBQuery1.ParamByName('contacts').Value:=edit5.text;
   execsql;
  IBQuery1.Close;
IBQuery1.Open;
end;
end;
Но почему то запись в бд добавляется после перезагрузки приложения. почему так? Но это только для клиента, а как сделать так чтобы сразу в главную - клиент, и в дочернюю-договор информация добавлялась? Пожалуйста, подскажите!

Последний раз редактировалось Stilet; 31.03.2014 в 22:21.
nata-khramenkova вне форума Ответить с цитированием
Старый 31.03.2014, 22:55   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Что такое "хранимые процедуры" знаешь?
Я бы сделал хранимую процедуру, выполняющую два запроса вставки, а из клиента вызывал ее передавая параметры:
http://www.firebirdsql.su/doku.php?id=execute_procedure
http://www.programmersforum.ru/showthread.php?t=79077
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.03.2014, 23:12   #3
nata-khramenkova
 
Регистрация: 08.12.2013
Сообщений: 4
По умолчанию

Чтобы прям знать как сделать эти процедуры-не знаю) но читала, представляю. В принципе такие мысли и были, но надо ведь убедиться. ОК, спасибо. Буду пытаться.
А еще вопросик можно? У меня в бд в принципе 5 таблиц, генератор и триггер сделала только для таблиц которые будут пополняться в работе, а для трех делать не стала, ну потому что данные вставлены в ходе разработки, и пополняться не будут, и по сути меняться не должны. Так оставить можно, или обязательно для всех таблиц делать "счетчики"? Спасибо.

Ой, а про заполнение в ibconsole как быть?вручную? мне надо буквально пару строк, чтоб для отчетности.

Последний раз редактировалось Stilet; 01.04.2014 в 08:05.
nata-khramenkova вне форума Ответить с цитированием
Старый 01.04.2014, 07:27   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Но почему то запись в бд добавляется после перезагрузки приложения
Почитай о транзакциях. Видимо COMMIT не выполняется
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.04.2014, 07:58   #5
superedward
Форумчанин
 
Аватар для superedward
 
Регистрация: 27.11.2012
Сообщений: 190
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Почитай о транзакциях. Видимо COMMIT не выполняется
Судя по коду, приведённому ТС, так оно и есть.
superedward вне форума Ответить с цитированием
Старый 01.04.2014, 08:10   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Так оставить можно, или обязательно для всех таблиц делать "счетчики"?
Если счетчики не нужны то их и не делают.
Однако для справочных таблиц ключевые поля если таблицы большие не помешают.
Цитата:
а про заполнение в ibconsole как быть?вручную?
Можешь и вручную. А вообще открой для себя бесплатный IBExpert - он тебе поможет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программист Delphi который поможет доделать проект на Delphi XE3 BukTop2009 Фриланс 3 26.10.2012 23:51
Не изменяется интерфейс моей программы при переходе с Delphi 7 на Delphi 2010 Elvisnya Общие вопросы Delphi 3 28.04.2011 15:59
Rad Studio 2011 XE: новое в Delphi, C++ Builder, RadPHP и Delphi Prism savva-paladin Софт 18 02.10.2010 20:24
Delphi. Как нарисовать в Delphi два движущиеся шара с определенной скоростью? redred Общие вопросы Delphi 10 11.12.2007 10:43
Как открыть БД, написанную в Delphi если нf другой машине Delphi нет? dagarik БД в Delphi 7 22.10.2007 17:54