Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
11-1191179304
LazyBob
2007-09-30 23:08
2008.07.06
Глюк с изменением свойства caption


15-1211564220
Пробегал2...
2008-05-23 21:37
2008.07.06
Кто-нибудь делал заборную емкость для воды на дачу?


2-1212611962
alex-drob
2008-06-05 00:39
2008.07.06
Запретить TreeView раскрываться при двойном клике на item-ах


15-1211368385
FireBird
2008-05-21 15:13
2008.07.06
FireBird


15-1211363788
hungry_Duck
2008-05-21 13:56
2008.07.06
построение триангуляционной сетки по опорным точкам





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский