Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запись из StringGrid в *.dbf [D7, XP]


Alexey ©   (2008-06-08 20:56:00) 

Привет мастерам! Вообщем делаю программку по импорту данных из Excel для добавления в файл *.dbf. Из цикла for копируется в StringGrid столько записей сколько указано в цикле. Код импорта указан ниже:

procedure TForm1.BitBtn2Click(Sender: TObject);
var Excel, XLCol, XLRow:variant;
   i,j:word;
   s:string;
begin
Excel := CreateOleObject('Excel.Application');
    Excel.Workbooks.Open('C:\Convert\IN\rsdp0016.xls');
      for j := 1 to 15 do begin
      for i := 1 to 20 do begin
      StringGrid1.Cells[j,i]:=Excel.Sheets[1].Cells[i,j].text;
      StringGrid1.RowCount:=StringGrid1.RowCount+1;
    end;end;
    RadioGroup1.Enabled:=true;
    MessageDlg('Импорт данных закончен!',mtInformation,[mbOk],0);
    edit1.Text:=inttostr(StringGrid1.RowCount);
    end;

Непонятка начинается дальше. Я пытаюсь скопировать записи из StringGrid из определнных столбцов при помощи следующего кода:

procedure TForm2.BitBtn1Click(Sender: TObject);
var i:integer;
begin
form2.Close;
form1.Table1.Active:=true;
form1.Table1.Open;
form1.Table1.Edit;
for i:=2 to form1.StringGrid1.RowCount-1 do begin
form1.Table1.FieldValues['LIC_SCH']:=form1.StringGrid1.Cells[10,i];
form1.Table1.FieldValues['PAS_FM']:=form1.StringGrid1.Cells[4,i];
form1.TAble1.FieldValues['PAS_NM']:=form1.StringGrid1.Cells[5,i];
form1.Table1.FieldValues['PAS_FT']:=form1.StringGrid1.Cells[6,i];
form1.TAble1.FieldValues['PAS_ROS']:=form1.StringGrid1.Cells[9,i];
form1.Table1.Append;
end;
form1.Table1.First;
MessageDlg('Конвертация завершилась успешно!',mtInformation,[mbOk],0);
end;

Непонятка в чём: такое чувство, что пытается записать в таблицу все записи, отображенные в StringGrid в указанных столбцах, а отображает всего лишь 19. Причём постоянно. Подскажите пожалуйста в чём может быть ошибка.


Германн   (2008-06-09 01:11:00) [1]


> Правильный_Вася   (08.06.08 21:07) [3]
>
> а если ты найдешь на дороге кусок конского навоза?
>

Не знаю как он, но мои собачки бывают при этом на седьмом небе от счастья!
:)


Alexey   (2008-06-08 22:09:00) [2]

БОЛЬШОЕ СПАСИБО!


Тын-Дын   (2008-06-08 21:58:00) [3]


> Alexey   (08.06.08 21:57) [13]
> Какой-то глюк наверное был с Delphi, вроде бы пошло. Попробую
> сам разобраться.


Вряд ли.

Порядок работы при добавлении записей:

Table.Append
//Заполнение полей
Table.Post


Alexey   (2008-06-08 21:57:00) [4]

Какой-то глюк наверное был с Delphi, вроде бы пошло. Попробую сам разобраться.


Тын-Дын   (2008-06-08 21:56:00) [5]

procedure TForm2.BitBtn1Click(Sender: TObject);
var i:integer;
begin
form2.Close;
form1.Table1.Active:=true;
form1.Table1.Open;
form1.Table1.Edit;
for i:=2 to form1.StringGrid1.RowCount-1 do begin
form1.Table1.FieldValues['LIC_SCH']:=form1.StringGrid1.Cells[10,i];
form1.Table1.FieldValues['PAS_FM']:=form1.StringGrid1.Cells[4,i];
form1.TAble1.FieldValues['PAS_NM']:=form1.StringGrid1.Cells[5,i];
form1.Table1.FieldValues['PAS_FT']:=form1.StringGrid1.Cells[6,i];
form1.TAble1.FieldValues['PAS_ROS']:=form1.StringGrid1.Cells[9,i];
form1.Table1.Append;
end;
form1.Table1.First;
MessageDlg('Конвертация завершилась успешно!',mtInformation,[mbOk],0);
end;


В этом коде ты уверен?

1. Append должен быть ПЕРЕД корректировкой полей в записи (перед каждой).
2. После заполнения полей должен быть Post (после каждой добавленной записи). Где он?


Alexey   (2008-06-08 21:51:00) [6]

procedure TForm1.BitBtn2Click(Sender: TObject);
var Excel, XLCol, XLRow:variant;
   i,j:word;
   s:string;
begin
Excel := CreateOleObject('Excel.Application');
    Excel.Workbooks.Open('C:\Convert\IN\rsdp0016.xls');
      for j := 1 to 15 do begin
      for i := 1 to 40 do begin
      StringGrid1.Cells[j,i]:=Excel.Sheets[1].Cells[i,j].text;
      StringGrid1.RowCount:=StringGrid1.RowCount+1;
    end;end;
    RadioGroup1.Enabled:=true;
    MessageDlg('Импорт данных закончен!',mtInformation,[mbOk],0);
    edit1.Text:=inttostr(StringGrid1.RowCount);
    end;

В StringGrid записывает 40 записей. Тут я немного соврал, в dbf постоянно выводит только 14 первых записей.


Тын-Дын   (2008-06-08 21:46:00) [7]


> Alexey   (08.06.08 21:44) [9]
> Это в примере так написано. Я пробовал писать 100 записей,
>  он все равно выводит только 19. Вот я и не пойму почему
> так?


Покажи код, где ты пробуешь вывести другое число записей.


Alexey   (2008-06-08 21:44:00) [8]

Это в примере так написано. Я пробовал писать 100 записей, он все равно выводит только 19. Вот я и не пойму почему так?


Тын-Дын   (2008-06-08 21:43:00) [9]


> Alexey   (08.06.08 21:29) [7]
> Никогда не сталкивался с макросами, не знаю как их писать.
>  Желательно, чтобы это выглядело так есть приложение, нажать
> кнопку, данные из excel импортировались в *.dbf. А что с
> кодом, который я написал, совсем глухо?


Если ты в TStringGrid записываешь 20 записей, то почему у тебя должно там быть другое число?


Alexey   (2008-06-08 21:29:00) [10]

Никогда не сталкивался с макросами, не знаю как их писать. Желательно, чтобы это выглядело так есть приложение, нажать кнопку, данные из excel импортировались в *.dbf. А что с кодом, который я написал, совсем глухо?


MsGuns   (2008-06-08 21:25:00) [11]

А макрос в Экселе нельзя написать ?


Alexey   (2008-06-08 21:15:00) [12]

Мне нужно выбрать определенные столбцы из Excel, а не весь файл сохранить!


Правильный_Вася   (2008-06-08 21:08:00) [13]

вообще-то эксель сам прекрасно сохраняет в дбф


Правильный_Вася   (2008-06-08 21:07:00) [14]

а если ты найдешь на дороге кусок конского навоза?


Alexey   (2008-06-08 21:01:00) [15]

Нашёл код импорта данных из excel в StringGrid, поэтому его и использовал.


Anatoly Podgoretsky   (2008-06-08 20:59:00) [16]

> Alexey  (08.06.2008 20:56:00)  [0]

Непонятно, зачем здесь StringGrid


Наверх

Титульная страница Поиск, карта сайта Написать письмо