Форум: "Базы";
Текущий архив: 2003.03.27;
Скачать: [xml.tar.bz2];
ВнизПеренос данных из удаленной базы в 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c