![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запись из 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