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

Вниз

Перенос данных из удаленной базы в Excel   Найти похожие ветки 

 
Smirov   (2003-03-07 07:59) [0]

Уважаемые мастера, подскажите пожалуйста, начинающему разобраться в проблеме:
если база данных локальная, то из Грида перебрасываю в Excel без проблем,
а когда Грид заполняется данными из удаленной базы *.gdb, то в Excel перебрасывать не хочет, пишет «Variant array index out of bounds” и посылает на строку:
ArrayData[Querys.RecNo, J]:=Querys.FieldByName(Querys.FieldDefs.Items[j-1].DisplayName).Value;


 
zacho ©   (2003-03-07 08:10) [1]

Вообще-то в данном случае никакой разницы между локальным подключением и сетевым быть не должно. Так что потрассируй и посмотри, в каком случае Querys.RecNo или J выходит за границы массива.
Еще пара замечаний:
1. Не стоит использовать RecNo.
2. Вместо Querys.FieldByName(Querys.FieldDefs.Items[j-1].DisplayName).Value лучше использовать Querys.Fields[j-1].Value (Hint: DisplayName вовсе не обязательно совпадает с FieldName)
3. Для более подробного ответа тебе стоит привести текст процедуры полностью


 
zacho ©   (2003-03-07 08:21) [2]

Еще одно небольшое замечание: в гриде нет данных ! Данные есть в датасете. Почуствуй разницу :-)


 
Карелин Артем ©   (2003-03-07 08:55) [3]

>ArrayData[Querys.RecNo, J]:=Querys.FieldByName(Querys.FieldDefs.Items[j-1].DisplayName).Value;
А где тут грид?


 
Соловьев ©   (2003-03-07 09:28) [4]

Я тоже напоролся на эту проблему. Оказалось что то что ты видишь в гриде при локалном подключении(TTable)? то там весь набор данных и RecNo катит , но когда используется клиент-серверная БД, то данных те что в TQuery(TIBDataSet) , ровно столько сколько нужно для отображения в гриде. Перед закачкой в Excel делаю
Select Count(id) from TableForExcel
И все работает как надо.


 
zacho ©   (2003-03-07 09:57) [5]


> Соловьев © (07.03.03 09:28)

На самом деле следует делать FetchAll.
И еще раз повторю, в общем случае не следует использовать RecNo,
ну кто мешает пройтись по датасету циклом
DataSet.First;
while not DataSet.Eof do
begin
...
DataSet.Next
end;
?


 
Соловьев ©   (2003-03-07 10:11) [6]


> DataSet.First;
> while not DataSet.Eof do
> begin
> ...
> DataSet.Next
> end; ?

Это для чего? Для подсчета записей?
А скорость при это вырастет? Я думаю лучше Select count...


 
zacho ©   (2003-03-07 10:23) [7]


> Соловьев © (07.03.03 10:11)

Нет, это для обработки данных в датасете. У тебя было написано "RecNo катит ", а я хотел сказать, что RecNo использовать не следует . А для подсчета записей Select count действительно лучше, или FetchAll и RecordCount это уж в зависимости от задачи


 
Smirov   (2003-03-11 09:21) [8]

Уважаемые мастера, большое спасибо за отзывчивость, но проблема пока осталась, сказывается уровень начинающего, привожу текст процедуры, подскажите, пожалуйста, чайнику, где собака порылась:
procedure TForm1.SendToExcel(ShFile: String; Querys: TQuery);
var
BeginCol, BeginRow, j :integer;
RowCount, ColCount :integer;
ExcelApp, Workbook, Range, Cell1, Cell2, ArrayData :Variant;
Begin
BeginCol:=1;
BeginRow:=9;
RowCount:=Querys.RecordCount;
ColCount:=Querys.FieldDefs.Count;
ExcelApp:= CreateOleObject("Excel.Application");
ExcelApp.Application.EnableEvents:=false;
Workbook:=ExcelApp.WorkBooks.Add("C:\Radio.xls");
ArrayData:=VarArrayCreate([1, RowCount, 1, ColCount], varVariant);
Querys.DisableConstraints;
Querys.First;
While Not Querys.Eof do
begin
for J:=1 to Querys.FieldDefs.Count do
begin
ArrayData[Querys.RecNo, J]:=Querys.Fields[j-1].Value;
End;
Querys.Next;
End;
Querys.EnableConstraints;
Cell1 :=WorkBook.WorkSheets[1].Cells[BeginRow, BeginCol];
Cell2 :=WorkBook.WorkSheets[1].Cells[BeginRow + RowCount -1, BeginCol + ColCount -1];
Range:= WorkBook.WorkSheets[1].Range[Cell1, Cell2];
Range.Value:=ArrayData;
ExcelApp.Visible:=true;
End;


 
Соловьев ©   (2003-03-11 09:51) [9]


> RowCount:=Querys.RecordCount;

Это первое, я же писал что надо сделать сначала подсчет записей SQL запросом или сделать как говорит

> zacho © (07.03.03 09:57)

FetchAll.

И еще

> Querys.DisableConstraints;

Может все-таки DisableControls?


 
Smirov   (2003-03-11 13:09) [10]

Большое спасибо, уважаемые Мастера, за помощь. Заработало!



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

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

Наверх




Память: 0.49 MB
Время: 0.044 c
14-88230
Мыш
2003-03-10 06:26
2003.03.27
Регистрация


1-87904
Beerlover
2003-03-17 04:07
2003.03.27
Метаклассы ?!?


1-87978
TY
2003-03-18 06:49
2003.03.27
Вопросы связанные с датой и временем.


3-87845
Pain
2003-03-10 18:36
2003.03.27
Работа с DBGrid...


1-87996
radion
2003-03-13 21:54
2003.03.27
какой командой можно открыть новую форму?