Главная страница
    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.46 MB
Время: 0.007 c
14-88141
cybermonk
2003-03-12 09:25
2003.03.27
Низкоуровневая запись-чтение с дискеты


1-88044
Дремучий
2003-03-14 11:41
2003.03.27
Будете смеятся - вопрос про иконку в треее...


4-88304
}{enon
2003-01-30 19:46
2003.03.27
Невозможность доступа


1-88025
NAlexey
2003-03-14 13:46
2003.03.27
Как динамически менять класс элемента


1-87982
Berezne
2003-03-18 10:11
2003.03.27
Вопрос по QReport





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский