Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.07.06;
Скачать: CL | DM;

Вниз

Запись из StringGrid в *.dbf   Найти похожие ветки 

 
Alexey   (2008-06-08 20:56) [0]

Привет мастерам! Вообщем делаю программку по импорту данных из 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. Причём постоянно. Подскажите пожалуйста в чём может быть ошибка.


 
Anatoly Podgoretsky ©   (2008-06-08 20:59) [1]

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

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


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

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


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

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


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

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


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

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


 
MsGuns ©   (2008-06-08 21:25) [6]

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


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

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


 
Тын-Дын ©   (2008-06-08 21:43) [8]


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


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


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

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


 
Тын-Дын ©   (2008-06-08 21:46) [10]


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


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


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

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:56) [12]

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:57) [13]

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


 
Тын-Дын ©   (2008-06-08 21:58) [14]


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


Вряд ли.

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

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


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

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


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


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

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



Страницы: 1 вся ветка

Текущий архив: 2008.07.06;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.019 c
15-1211296737
buzb
2008-05-20 19:18
2008.07.06
Посоветуйте C++ компилятор.


2-1212697784
DmT
2008-06-06 00:29
2008.07.06
Как получить копию меню активного окна?


15-1211534909
Reindeer Moss Eater
2008-05-23 13:28
2008.07.06
рашен процессор каминг сун


3-1201171203
harisma
2008-01-24 13:40
2008.07.06
TADODataSet с выходным параметром.


2-1212725754
Прохожев
2008-06-06 08:15
2008.07.06
Перебрать все компоненты на всех формах в проекте