Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-88209
War
2003-03-11 10:37
2003.03.27
Война за нефть.


6-88105
Metallica
2002-11-18 18:47
2003.03.27
Вопрос по TWebBrowser...


4-88297
Amber
2003-01-27 18:11
2003.03.27
Кто шарит в Winsta и Desktop-ах помогите.


1-88017
alert_2003
2003-03-14 11:59
2003.03.27
правильное хранение integer в TStrings.Objects


8-88076
Den-X
2002-12-16 17:39
2003.03.27
Как проиграть потоковую mp3?





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