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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2009, 17:07   #1
KARUSHEV
Форумчанин
 
Аватар для KARUSHEV
 
Регистрация: 11.01.2009
Сообщений: 102
Восклицание Подскажите, не могу разобраться с функцией INSERT

Подскажите пожалуйста, никак не могу разобраться с функцией INSERT.

Нужно чтобы в моей БД, таблица Счета заполнялась из других таблиц и два столбца с датами с формы Scheta DataTimePicker, хочу реализовать это при помощи кнопки 'Сформировать счета'

Присвоение дат описал так, не знаю на сколько верно:

procedure TForm7.Button1Click(Sender: TObject);
var
Tmp_Dat_Vipiski: TDateTime;
Tmp_Dat_Oplati: TDateTime;
begin
try

with DataModule2.SCHETQuery do

begin
ParamByName('Data_Vipiski').Value := Tmp_Dat_Vipiski;
ParamByName('Data_Oplati').Value := Tmp_Dat_Oplati;
end;
except
end;
end;

База прилагается, не судите строго я только учусь.
Заранее спасибо!
Вложения
Тип файла: rar Television_Company.rar (480.8 Кб, 16 просмотров)
KARUSHEV вне форума Ответить с цитированием
Старый 28.01.2009, 17:57   #2
NOOB
Пользователь
 
Аватар для NOOB
 
Регистрация: 01.11.2007
Сообщений: 45
По умолчанию

Во-первых совет на будущее: лучше делать так

ParamByName('Data_Vipiski').AsDateT ime := Tmp_Dat_Vipiski;
ParamByName('Data_Oplati').AsDateTi me := Tmp_Dat_Oplati;

Во-вторых, что-то я не нашел в твоей кверине, куда у тебя там передаются параметры?

Код:
SELECT Abonent.Family, Abonent.Name, Abonent.Otchectvo, Tarifs.Vid_Tarifa, Schet.Date_Vipiski, Schet.Data_Oplati, Change_tarif.Price, Schet.ID_Schet
FROM "Schet.DB" Schet
   INNER JOIN "Dogovor.DB" Dogovor
   ON  (Schet.Kod_Dogovor = Dogovor.ID_Dogovor)  
   INNER JOIN "Abonent.DB" Abonent
   ON  (Abonent.ID_Abonent = Dogovor.Kod_Abonent)  
   INNER JOIN "Tarifs.DB" Tarifs
   ON  (Dogovor.DKod_Tarif = Tarifs.ID_Tarif)  
   INNER JOIN "Change_Tarif.DB" Change_tarif
   ON  (Change_tarif.Kod_Tarif = Tarifs.ID_Tarif)
Где параметры? Куда ты их хотел вставить?


вообще INSERT делается так, один из способов:
1) в Query забиваешь запрос типа:
INSERT INTO table1 ( col1, col2, col3 )
VALUES ( :col1,:col2, :col3 );
2) передаешь туда параметры
Query.ParamByName('Data_Vipiski').A sDateTime := Tmp_Dat_Vipiski;
Query.ParamByName('Data_Oplati').As DateTime := Tmp_Dat_Oplati;
3) Query.Close; - на всякий случай
4) Query.ExecSQL;
5) Query.Close;
6) Query.Free; - если создавал динамически.
NOOB вне форума Ответить с цитированием
Старый 28.01.2009, 18:06   #3
KARUSHEV
Форумчанин
 
Аватар для KARUSHEV
 
Регистрация: 11.01.2009
Сообщений: 102
По умолчанию

[QUOTE=NOOB;194767]Где параметры? Куда ты их хотел вставить?

Мне нужно чтобы заполнялась таблица Счета. Даты я выставляю на форме, их нужно присвоить столбцам Data_Vipiski и Data_Oplati, и Kod_Dogovora берется из таблицы Dogovor.
KARUSHEV вне форума Ответить с цитированием
Старый 28.01.2009, 19:30   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от KARUSHEV Посмотреть сообщение
Мне нужно чтобы заполнялась таблица Счета. Даты я выставляю на форме, их нужно присвоить столбцам Data_Vipiski и Data_Oplati, и Kod_Dogovora берется из таблицы Dogovor.
Примерно так:
Код:
procedure TForm7.Button1Click(Sender: TObject);
begin
try
DataModule2.TSchet.Insert;
DataModule2.TSchet.FieldByName('Date_Vipiski').Value:=DateTimePicker1.Date;
DataModule2.TSchet.FieldByName('Data_Oplati').Value:=DateTimePicker2.Date;
DataModule2.TSchet.FieldByName('Kod_Dogovor').Value:=DataModule2.TDogovor.FieldByName('ID_Dogovor').Value;
DataModule2.TSchet.Post;
except
;
end;
end;

Последний раз редактировалось mihali4; 29.01.2009 в 00:09.
mihali4 вне форума Ответить с цитированием
Старый 28.01.2009, 20:27   #5
KARUSHEV
Форумчанин
 
Аватар для KARUSHEV
 
Регистрация: 11.01.2009
Сообщений: 102
По умолчанию

Подскажите, нужно в SQL Builder'e (SCHETQuery) прописывать, что-то вроде этого:

INSERT INTO
Abonent.Family, Abonent.Name, Abonent.Otchectvo, Tarifs.Vid_Tarifa, Schet.Date_Vipiski, Schet.Data_Oplati, Change_tarif.Price, Schet.ID_Schet
FROM "Schet.DB" Schet
INNER JOIN "Dogovor.DB" Dogovor
ON (Schet.Kod_Dogovor = Dogovor.ID_Dogovor)
INNER JOIN "Abonent.DB" Abonent
ON (Abonent.ID_Abonent = Dogovor.Kod_Abonent)
INNER JOIN "Tarifs.DB" Tarifs
ON (Dogovor.DKod_Tarif = Tarifs.ID_Tarif)
INNER JOIN "Change_Tarif.DB" Change_tarif
ON (Change_tarif.Kod_Tarif = Tarifs.ID_Tarif)

Если нужно, как тут присваивать значения полям?
KARUSHEV вне форума Ответить с цитированием
Старый 28.01.2009, 22:49   #6
NOOB
Пользователь
 
Аватар для NOOB
 
Регистрация: 01.11.2007
Сообщений: 45
По умолчанию

Что-то с SQL синтаксисом у тебя... Посмотри как правильно пишутся SQL запросы для твоей СУБД. Ну например:

Код:
Query.SQL.Text:='INSERT INTO Schet (поле1) VALUES (:значениеinteger1)';
Query.ParamByName('значениеinteger1').AsInteger:=1;
Query.Close;
Query.ExecSQL;
А можешь не заморачиваться с этим и сделать как сказал mihali4, но если честно не уверен на счет сджоиных таблиц, проинсертит ли.

Последний раз редактировалось NOOB; 28.01.2009 в 22:53.
NOOB вне форума Ответить с цитированием
Старый 28.01.2009, 23:07   #7
KARUSHEV
Форумчанин
 
Аватар для KARUSHEV
 
Регистрация: 11.01.2009
Сообщений: 102
По умолчанию

С процедурой TForm7.Button1Click(Sender: TObject);
как написал mihali4 я сделал, не работает, я так понимаю потому что нужно в SQL Builder'e (SCHETQuery) прописывать, вот в этом и вопрос нужно или нет?

Я SQL только начинаю изучать, поэтому куча вопросов. Не могу найти в книгах, то что помогло бы разобраться с этим (аналогичный пример). А тот код который я отобразил формируется сам в SQL Builder'e, я там только поменял слово SELECT на INSERT INTO.

Буду разбираться ))
KARUSHEV вне форума Ответить с цитированием
Старый 28.01.2009, 23:36   #8
NOOB
Пользователь
 
Аватар для NOOB
 
Регистрация: 01.11.2007
Сообщений: 45
По умолчанию

Короче, советую посмотреть все это дело в книжках либо "Библия Delphi" Михаила Фленова, либо в "Система программирования Delphi" Валерий Фаронов, там все доступно написано и примеры приведены.
Удачи в начинаниях
NOOB вне форума Ответить с цитированием
Старый 29.01.2009, 00:12   #9
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
как написал mihali4 я сделал, не работает
Интересно, что там может не работать... Присвоение значений?
Только если вы тупо скопировали...
Ну, а правильные имена полей кому лучше знать? Наверное вам.
На всякий случай подправил их в полном соответствии с вашей таблицей.
mihali4 вне форума Ответить с цитированием
Старый 30.01.2009, 10:34   #10
KARUSHEV
Форумчанин
 
Аватар для KARUSHEV
 
Регистрация: 11.01.2009
Сообщений: 102
По умолчанию

mihali4, извиняюсь, таблица заполняется, посмотрел через DataBase Desktop, большое спасибо!!!
Просто не отображается в DBGrid, с этим буду сейчас разбираться.

А для чего вот эта строка?
DataModule2.TSchet.Post;

Возник другой вопрос, как лучше реализовать, оплату клиентов?
Добавить к таблице Schet новое поле Oplata или нужно создавать еще одну таблицу по оплате и связать ее с таблицей счет?
KARUSHEV вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу разобраться Var17 Общие вопросы Delphi 6 27.03.2010 01:21
Не могу разобраться с типами DM_bite Помощь студентам 6 11.08.2008 11:22
Не могу разобраться с TreeView Seqular Компоненты Delphi 3 14.04.2007 17:37