Форум: "Начинающим";
Текущий архив: 2008.07.06;
Скачать: [xml.tar.bz2];
ВнизЗапись из 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.062 c