-
Пытаюсь обработать документ Exel в Delphi при помощи технологии ADO. Но при запуске любого проекта с любым компонентом ADO возникает ошибка "Project Project1.exe raised exception class EOleException with message 'Разрушительный сбой'.Process stopped. Use Step or Run to continue.". Облазил кучу форумов, но ответа не нашел. Подскажите плиз!!!
-
У вас ошибка в 17й строке.
-
17-я строка у меня public declarations...(((
-
> возникает ошибка "Project Project1.exe raised exception > class EOleException with message 'Разрушительный сбой'
У меня выработалось четкое правило. Если я встречаю где-то сообщение не на аглицком языке сообщение об ошибке (и если я точно знаю, что не я его писал), то ну их нафиг все сторонние компоненты! :) В т.ч. и переводы от Polaris. Примите и прочь!
-
> den945 (09.01.2011 01:36:02) [2]
Неправда, я посмотрел текст, там совсем другое.
-
> Германн (09.01.2011 02:41:03) [3]
И Эксель с Офисом нафиг?
-
> den945 © (09.01.11 01:36) [2]
тогда вам нужно нанять программиста.
-
> Пытаюсь обработать документ Exel в Delphi при помощи технологии > ADO.
Пытался вырывать зуб отверткой... неудобно... и пациент издает такие звуки. которые на форумах не описаны. Рекомендую посмотреть ссылку http://code.progler.ru/view/363
-
> YurikGL © (10.01.11 12:50) [7]
Excel может выступать источником данных, как и любая база данных.
-
> Рекомендую посмотреть ссылку набор отверток...
-
den, вопросы про подземный стук здесь не понимают Расскажи что ты делаешь конкретно, что используешь, как используешь, в какой ситуации/на какой строчке кода происходит ошибка.
-
> Excel может выступать источником данных, как и любая база > данных.
Может... вопрос скорости и удобсто работы.
> sniknik © (10.01.11 16:17) [9] А я и не спорю... причем очень старых. Но если автору так хочется...
-
>> Excel может выступать источником данных, как и любая база данных. > вопрос скорости и удобсто работы. это самый быстрый, и удобный способ работы с данными (стандартный). во всяком случае ни один из методов по ссылке его "не догонит", да и код будет покороче.
-
> это самый быстрый, и удобный способ работы с данными (стандартный). > во всяком случае ни один из методов по ссылке его "не догонит", > да и код будет покороче.
По ссылке пройдите.. там этот метод тоже есть.
-
> там этот метод тоже есть. нет, там есть кучка дерьма (сорри), в котором утопили многое, в том числе и ADO. то что оно где то краешком выглядывает не делает это ADO методом вот, что должно быть (убрал все лишнее) begin
ADOConnectionSource.Execute(
'SELECT * INTO [Телефоны] IN \"'+GetCurrentDir+'\1.xls\" \"Excel 8.0;\" FROM QMain'
);
ShowMessage('Экспорт завершен');
Shellexecute(Application.Handle, 'open', PAnsiChar(GetCurrentDir+'\1.xls'), nil, nil, sw_ShowNormal);
end;
-
> вот, что должно быть (убрал все лишнее) > begin > ADOConnectionSource.Execute( > 'SELECT * INTO [Телефоны] IN "'+GetCurrentDir+'\1.xls" > "Excel 8.0;" FROM QMain' > ); > ShowMessage('Экспорт завершен'); > Shellexecute(Application.Handle, 'open', PAnsiChar(GetCurrentDir+'\1. > xls'), nil, nil, sw_ShowNormal); > end; >
Время работы кода у меня получилось почти в 5 раз медленнее, чем при создании xml-ки. Что делаю не так?
-
> Что делаю не так? врешь неуклюже.
-
p.s. для тех кому неохота качать "примеры", сравнение идет вот с этим кодом, который якобы в 5 раз быстрее ... procedure TForm1.SourceDatasetInit;
Begin
ADODataSetSource.Close;
ADODataSetSource.CommandText:='SELECT [Main].[Tel], '+
'[Main].[name], '+
'[Ul].[NameUl], '+
'[Main].[House], '+
'[Korp].[NameKorp], '+
'[Flat].[NameFlat] '+
' FROM Main, Ul, Korp, Flat '+
' WHERE ([Main].[IdUl]=[Ul].[IdUl]) And ([Main].[IdKorp]=[Korp].[IdKorp]) And ([Main].[IdFlat]=[Flat].[IdFlat]) ';
ADODataSetSource.Open;
End;
procedure TForm1.BXMLWithOutShablonClick(Sender: TObject);
var
i:integer;
begin
SourceDatasetInit;
XMLDocument1.Active:=false;
XMLDocument1.XML.Clear;
XMLDocument1.xml.Add('<?xml version=\"1.0\"?>');
XMLDocument1.xml.Add('<?mso-application progid=\"Excel.Sheet\"?>');
XMLDocument1.xml.Add('<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"');
XMLDocument1.xml.Add(' xmlns:o=\"urn:schemas-microsoft-com:office:office\"');
XMLDocument1.xml.Add(' xmlns:x=\"urn:schemas-microsoft-com:office:excel\"');
XMLDocument1.xml.Add(' xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"');
XMLDocument1.xml.Add(' xmlns:html=\"http://www.w3.org/TR/REC-html40\">');
XMLDocument1.xml.Add('</Workbook>');
XMLDocument1.Active:=true;
XMLDocument1.ChildNodes.Nodes['Workbook'].ChildNodes.Nodes['Worksheet'].Attribut es['ss:Name']:='Лист1';
with XMLDocument1.ChildNodes.Nodes['Workbook'].ChildNodes.Nodes['Worksheet'].ChildNod es.Nodes['Table'] do begin
Attributes['ss:ExpandedColumnCount']:=IntToStr(ADODataSetSource.FieldCount);
Attributes['ss:ExpandedRowCount']:=IntToStr(ADODataSetSource.RecordCount+1);
Attributes['x:FullColumns']:=1;
Attributes['x:FullRows']:=1;
AddChild('Column');
ChildNodes.Last.Attributes['ss:Index']:=2; ChildNodes.Last.Attributes['ss:Width']:=240; AddChild('Column');
ChildNodes.Last.Attributes['ss:Index']:=3;
ChildNodes.Last.Attributes['ss:Width']:=100; AddChild('Row');
ChildNodes.Last.AddChild('Cell');
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].Attributes['ss:Type']:='Strin g';
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].NodeValue:='Телефон';
ChildNodes.Last.AddChild('Cell');
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].Attributes['ss:Type']:='Strin g';
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].NodeValue:='Имя';
ChildNodes.Last.AddChild('Cell');
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].Attributes['ss:Type']:='Strin g';
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].NodeValue:='Улица';
ChildNodes.Last.AddChild('Cell');
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].Attributes['ss:Type']:='Strin g';
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].NodeValue:='Дом';
ChildNodes.Last.AddChild('Cell');
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].Attributes['ss:Type']:='Strin g';
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].NodeValue:='Корпус';
ChildNodes.Last.AddChild('Cell');
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].Attributes['ss:Type']:='Strin g';
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].NodeValue:='Квартира';
ADODataSetSource.First;
repeat
AddChild('Row');
for i:=0 to ADODataSetSource.FieldCount-1 do begin;
ChildNodes.Last.AddChild('Cell');
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].Attributes['ss:Type']:='Strin g';
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].NodeValue:=ADODataSetSource.F ields[i].AsString;
end;
ADODataSetSource.Next;
until ADODataSetSource.Eof;
end;
XMLDocument1.SaveToFile(GetCurrentDir+'\1.xml');
shellexecute(Application.Handle,'open',PAnsiChar(GetCurrentDir+'\1.xml'),nil,nil, sw_ShowNormal);
end;
-
> > Что делаю не так? > врешь неуклюже.
Время выгрузки через ADO по твоему варианту 1563 Экспорт через OLE без шаблона 1015 Экспорт через XLM без шаблона 250
Время считается через GetTickCount
Кто врет?
-
> Время выгрузки через ADO по твоему варианту 1563 а кнопку быстрее жать не пробовал? ... думаю догадался в чем "проблема". LoL у меня 31, и время "считается через GetTickCount".
> Кто врет? ты конечно, т.к. утверждаешь это голословно, без показа "как считается", и "что GetTickCount" (где GetTickCount-ы поставил).
|