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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2009, 09:39   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Смущение вставка даты циклом из edit

Добрый день! Не полчается вставить циклом дату. Так дата отлично вставляется в БД:
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 edit1.Text:=datetostr(form1.DateTimePicker1.Date);
 table1.Insert;
 table1.FieldByName('Date').AsString:=edit1.Text;
 table1.Refresh;
end;
А можно ли сделать, чтобы можно было задать цикл вставки даты из Edit-a? Или вставить дату из StringGrid-a. Я пробовал сделать так:
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
 i: integer;
begin
 i:=1;
 for i:=0 to 4 do
 begin
 form1.StringGrid1.Cells[i,0]:=datetostr(form1.DateTimePicker1.Date);
 end;
 for i:=0 to stringgrid1.ColCount do
 table1.Insert;
 table1.FieldByName('Date').AsString:=edit1.Text;
 table1.Refresh;
 inc(i);
end;
Но получается, что дата не заносится, а появляется список выпадающий в таблице(data), в котором можно выбрать дату из form1.DateTimePicker1. Кто может помочь? Буду очень благодраен за помощь.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 01.08.2009, 12:03   #2
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

Если table1 это TTable из BDE, то надо вместо table1.Refresh; поставить table1.Post; (запись в базу данных).
А table1.Refresh просто перечитывает данные из таблицы БД чтобы обновить их отображение на форме.

Функция Inc(i) в этом цикле неуместна.

----------- добавлено
Заметил, кстати, что второй цикл без begin ... end. В этом случае в цикле будет выполняться только первый оператор table1.Insert; Следующие за ним выполняются один раз.
В этом коде какая-то путаница: вставляются даты в грид, а записывать строку пытаются из Edit1. Где, конечно, одно и то же значение, если оно там вообще есть.

Последний раз редактировалось Karabash; 01.08.2009 в 12:28.
Karabash вне форума Ответить с цитированием
Старый 01.08.2009, 12:30   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Все равно не работает .
Уже и так делал:
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
 i: integer;
begin
 table1.Insert;
 i:=0;
 for i:=0 to 4 do
  form1.StringGrid1.Cells[i,0]:=datetostr(form1.DateTimePicker1.Date);
 table1.FieldByName('Date').AsString:=form1.StringGrid1.Cells[i,0];
 table1.Post;
end;
Но эффекта 0...
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 01.08.2009, 12:36   #4
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  i: integer;
begin
  for i:=0 to 4 do begin
    table1.Insert;
    table1.FieldByName('Date').AsString:=datetostr(DateTimePicker1.Date);
    table1.Post;
  end;
end;
Все равно в базу будет записываться только одно значение даты, которое находится в DateTimePicker1 в момент выполнения процедуры. Это на тот случай, если нужно записывать разные даты.

Последний раз редактировалось Karabash; 01.08.2009 в 12:44.
Karabash вне форума Ответить с цитированием
Старый 01.08.2009, 13:24   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Вот! (че т меня прет сегодня ) я переделал предложенный код на такой
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  i: integer;
begin
  for i:=0 to 4 do begin
  datetostr(DateTimePicker1.Date);
    table1.Insert;
    table1.FieldByName('Date').AsString:=Form1.StringGrid1.Cells[i,0];
    table1.Post;
  end;
end;
Теперь даты заносятся. Но они заносятся по убыванию. Как сделать, чтобы они заносились по возрастанию?). Чтобы было не
05.08.09
04.08.09
03.08.09
02.08.09
01.08.09
а так:
01.08.09
02.08.09
03.08.09
04.08.09
05.08.09
???
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 01.08.2009, 13:40   #6
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

Этот оператор "работает в пустоту" datetostr(DateTimePicker1.Date);.
Даты записываются так как указано: с первой колонки до последней.
если надо наоборот, то цикл переделывается чтобы даты из гриды брались от последней колонки до первой:
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  i: integer;
begin
  for i:=4 downto 0 do begin
    table1.Insert;
    table1.FieldByName('Date').AsString:=Form1.StringGrid1.Cells[i,0];
    table1.Post;
  end;
end;
Karabash вне форума Ответить с цитированием
Старый 01.08.2009, 16:13   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

А почему у меня не вставляется дата из моего грида? По сути код то тот же самый:
Код:
procedure TForm8.BitBtn8Click(Sender: TObject);
var
 i,k,j: integer;
begin
i:=1;
 while Form8.StringGrid1.Cells[1,i] <> '' do
 begin
  if Form8.Table_jur.Locate('Fam_jur;Imy_jur;Otche_jur',VarArrayOf([Form8.StringGrid1.Cells[1,i],
                                 Form8.StringGrid1.Cells[2,i],Form8.StringGrid1.Cells[3,i]]),
                                 [loCaseInsensitive,loPartialKey]) = False then

  for k:=4 downto Form8.StringGrid1.ColCount do
  begin
     Form8.Table_jur.Insert;
     Form8.Table_jur.FieldByName('Fam_jur').AsString:=Form8.StringGrid1.Cells[1,i];
     Form8.Table_jur.FieldByName('Imy_jur').AsString:=Form8.StringGrid1.Cells[2,i];
     Form8.Table_jur.FieldByName('Otche_jur').AsString:=Form8.StringGrid1.Cells[3,i];
     Form8.Table_jur.FieldByName('God_jur').AsInteger:=StrToInt(Form8.StringGrid1.Cells[4,29]);
     Form8.Table_jur.FieldByName('Chetvert').AsString:=Form8.StringGrid1.Cells[2,28];
     Form8.Table_jur.FieldByName('Pred_jur').AsString:=Form8.StringGrid1.Cells[2,29];
     Form8.Table_jur.FieldByName('Klass').AsString:=Form8.StringGrid1.Cells[4,28];
     Form8.Table_jur.FieldByName('Data').AsString:=Form8.StringGrid1.Cells[k,0];
     Form8.Table_jur.Post;
  end;
  Inc(i);
 end;
end;
Если убираю вставки в поле Data, то остальные данные заносятся отлично. Что не так?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 01.08.2009, 17:00   #8
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

А в гриде сколько колонок? если 4 (или больше), то не будет вставляться, т.к. конструкция for k:=4 downto Form8.StringGrid1.ColCount do не корректна. Вернее будет работать, если ColCount <= 4.

При наличии downto в цикле итерации идут от большего числа к меньшему. Так же надо помнить, что ColCount - это количество колонок, а индекс первой колонки "0" и, следовательно, индекс последней колонки StringGrid1.ColCount-1.

Последний раз редактировалось Karabash; 02.08.2009 в 06:42.
Karabash вне форума Ответить с цитированием
Старый 01.08.2009, 17:18   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
А в гриде сколько колонок?
Всего 100. Но мне нужен цикл от 4ой до 100ой колонки по нулевой(то есть первой) строки...
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 02.08.2009, 06:34   #10
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

Зачем же тогда downto применять? Все же to и downto - весьма разные вещи.
От 4-ой до последней колонки цикл будет выглядеть так: for k:=4 to StringGrid1.ColCount-1 do

Последний раз редактировалось Karabash; 02.08.2009 в 06:52.
Karabash вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставка даты в БД artemavd БД в Delphi 4 07.08.2009 18:06
Задача с циклом for в c++ Many man Помощь студентам 5 14.12.2008 12:01
Вставка в поле Edit EVO-X Общие вопросы Delphi 10 11.07.2008 22:25
Вставка текущей даты в БД! Oleg Romanchuk БД в Delphi 5 21.08.2007 19:59
Вставка даты в несколько DBDateTimeEditEh одновременно!? John_chek Компоненты Delphi 3 12.02.2007 16:34