Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > подскажите с INSERT


Автор: Karushev 31.1.2009, 13:57
Всем доброго дня!
Подскажите, может кто знает, почему с этим кодом заполняется только первая строка (с одним договором)? Как сделать, чтобы заполнялась вся таблица, т.е. сколько есть договоров (записей ID_Dogovor).

Может быть нужно еще с полем ID_Schet (счетчик) таблицы Schet, прописать в этом коде.

Код

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;

Автор: Akella 31.1.2009, 14:11
Цитата(Karushev @  31.1.2009,  13:57 Найти цитируемый пост)
Подскажите, может кто знает, почему с этим кодом заполняется только первая строка


Цитата(Karushev @  31.1.2009,  13:57 Найти цитируемый пост)
Как сделать, чтобы заполнялась вся таблица

Бред какой-то smile , INSERT ДОБАВЛЯЕТ одну запись, и не зависимо от того, сколько уже в таблице записей!

Может ты не понимаешь разницы между Insert и Update?
Может тебе в цикле по всем записям таблицы нужно отредактировать их, все записи?

Автор: Данкинг 31.1.2009, 14:15
Цитата(Karushev @  31.1.2009,  13:57 Найти цитируемый пост)
почему с этим кодом заполняется только первая строка (с одним договором)?

Потому что этот код именно для этого и написан.

Цитата(Karushev @  31.1.2009,  13:57 Найти цитируемый пост)
Как сделать, чтобы заполнялась вся таблица, т.е. сколько есть договоров (записей ID_Dogovor).

В смысле - а откуда берутся эти договоры-то?

Цитата(Akella @  31.1.2009,  14:11 Найти цитируемый пост)
Может тебе в цикле по всем записям таблицы нужно отредактировать их, все записи? 

А, вот что, теперь дошло. smile Да, вероятно, нужно действительно или циклом, или запросом, в зависимости от целей.

Автор: Karushev 31.1.2009, 14:21
У меня есть таблицы Dogovor (ID_Dogovor, Kod_Tarifa, Data_Dogovora, Kod_Abonenta) и таблица Schet (ID_Schet, Data_Vipiski, Data_Oplati, Kod_Dogovora)

Первая таблица заполняется ручками ))
Вторая таблица связана с первой ID_Dogovor  с Kod_Dogovora

Вторую таблицу мне нужно заполнить с помощью кнопки обработчик написан выше. Даты присваиваются из DateTimePicker, ID_Shet это счетчик, 

Не знаю как это сделать, может кто предложит другой код?

С помощью этого кода заполняется только строка с первым договором.

Добавлено через 9 минут и 54 секунды
А если циклом кто-нибудь может помочь?

Получается так что цикл нужно организовать так: добавляются записи Sheta, 
количество такое же сколько и записей в таблице Dogovora.


Автор: Akella 31.1.2009, 15:30
Karushev, код нудно выделять, чтобы твои сообщения были более читабельны и привлекательны, так сказать.
http://forum.vingrad.ru/forum/topic-126445.html

Автор: Karushev 3.2.2009, 12:09
Неужели никто не знает, как заполнить таблицу? Может подскажите, где посмотреть аналогичный пример по заполнению одной таблицы, связанной с другой таблицей.  

Заранее, большое спасибо!  smile 

Автор: Akella 3.2.2009, 12:17
Цитата(Karushev @  3.2.2009,  12:09 Найти цитируемый пост)
как заполнить таблицу?

ЗНАЕМ!!! smile  ЭТО ТЫ НЕ ЗНАЕШЬ, ЧЕМ ДОБАВЛЕНИЕ ОТЛИЧАЕТСЯ ОТ РЕДАКТИРОВАНИЯ! НОРМАЛЬНО ЗАДАЙ ВОПРОС. ЗДЕСЬ НЕ ТЕЛЕПАТЫ, ЧТОБЫ ОТГАДЫВАТЬ, ЧТО ТЫ ХОЧЕШЬ ТАМ У СЕБЯ!

Автор: Frees 3.2.2009, 12:36
Цитата(Karushev @  3.2.2009,  14:09 Найти цитируемый пост)
 как заполнить таблицу? 

перебрать все записи
Код

procedure TForm7.Button1Click(Sender: TObject);
begin
DataModule2.TDogovor.First
while not DataModule2.TDogovor.eof do
  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;

Автор: Tcin 3.2.2009, 13:04
ну и не забываем про

Код

DataModule2.TDogovor.Next;


после try..except, но в теле цикла, конечно: добавь begin..end (уточню, на всякий случай...)
 smile 

Автор: Frees 3.2.2009, 13:08
Цитата(Tcin @  3.2.2009,  15:04 Найти цитируемый пост)
после try..except

скорее уж внутри

Автор: Tcin 3.2.2009, 13:11
Цитата(Frees @  3.2.2009,  13:08 Найти цитируемый пост)
скорее уж внутри


пардон, внутри - не советую: next должен выполниться в любом случае.

Автор: Frees 3.2.2009, 13:13
Цитата(Tcin @  3.2.2009,  15:11 Найти цитируемый пост)
пардон, внутри - не советую: next должен выполниться в любом случае.

тогда вот так

Код

procedure TForm7.Button1Click(Sender: TObject);
begin
DataModule2.TDogovor.First
while not DataModule2.TDogovor.eof do
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;
  DataModule2.TDogovor.Next;  
end;
end;


Добавлено через 1 минуту и 52 секунды
Karushev, TDogovor и TSchet имена не правельные с Т начинаются имена типов а не компонентов

Автор: Karushev 3.2.2009, 13:52
Спасибо! 

Только не работает, ошибка вылетает на 4 строчке:

Код

while not DataModule2.TDogovor.eof do


пишет:
[Error] Unit7.pas(44): Missing operator or semicolon
[Fatal Error] Project1.dpr(12): Could not compile used unit 'Unit7.pas'


Приложил базу, на всякий случай...

Автор: Karushev 3.2.2009, 23:24
Всем БОЛЬШОЕ СПАСИБО!!!

не хватало ;

Очень выручили с контрольной!

Автор: Данкинг 4.2.2009, 00:10
Цитата(Karushev @  3.2.2009,  23:24 Найти цитируемый пост)
не хватало ;

Да вроде так и было написано, собственно, в ошибке. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)