Хоть убейте, не врубаюсь в чем проблема..
procedure TForm1.Button1Click(Sender: TObject);
var i,k,j,rowcount:integer;
xmlSource: DOMDocument;
xmlStylesheet: DOMDocument;
Start, Finish: Int64;
TableName,XmlHome:string;
begin
Start := GetTickCount;
k:=0;
TableName:='';
ProgressBar1.Position:=0;
ProgressBar1.Properties.Max:=FileList.Count - 1 ;
for I := 0 to FileList.Count - 1 do
begin
Application.ProcessMessages;
xml := IXMLDOMDocument(CreateOleObject('msxml.domdocument'));
//Блок xslt трансформации
xmlSource := CoDOMDocument.Create;
xmlStylesheet := CoDOMDocument.Create;
xmlSource.load(FileList[i]);
xmlStylesheet.load('c:\temp\test\test.xsl'); //шаблон
xml.loadXML(xmlSource.transformNode(xmlStylesheet));
//
//Получаем таблицы оракла
OraQuery1.SQL.Text:='select LoadBufView from CFG_BUFFERTABLE';
OraQuery1.Open;
OraQuery1.First;
//Проходим по всем таблицам
while not OraQuery1.Eof do
begin
TableName:=OraQuery1.FieldByName('LoadBufView').AsString;
rowcount:=0;
//Получаем список полей и типов для данной таблицы
OraQuery2.sql.Text:=' select column_name as Field,substr(data_type,1,1) as Type'+
' from user_tab_columns where table_name = '''+TableName+'''';
OraQuery2.Open;
OraQuery2.First;
//загружаем поля в массив
SetLength(FieldsArray,OraQuery2.RecordCount+1);
while not OraQuery2.eof do
begin
inc(k);
FieldsArray[k,1]:=OraQuery2.FieldByName('Field').AsString;
FieldsArray[k,2]:=OraQuery2.FieldByName('Type').AsString;
OraQuery2.Next;
end;
//Получаем количество записей xml для таблицы
rowcount:=xml.documentElement.selectNodes('//'+uppercase(TableName)).length;
For j:=1 to rowcount do
begin
//Блок разбора xml файла и заполнение массива значениеми поля
for k := 1 to length(FieldsArray) do
begin
try
FieldsArray[k,3]:=xml.documentElement.selectSingleNode(uppercase('//'+TableName+'/'+(FieldsArray[k,1]))).text;
except
showmessage(FieldsArray[k,1]);
end;
end;
//блок загрузки массива в оракл
OraSession1.Connect;
OraLoader1.Columns.Clear; //чистим поля
OraLoader1.TableName:=TableName; !!!!!!!!!!!!!!!!! ТУТ ВЫЛАЗИТ ACCESS VIOLATION AT ADDRESS .....
OraLoader1.Load;
end;
OraQuery1.Next;
end;
//
xmlSource:=nil;
xmlStylesheet:=nil;
xml:=nil;
ProgressBar1.Position:=ProgressBar1.Position+1;
end;
Finish := GetTickCount;
Label1.Caption := 'Time: ' + FloatToStr((Finish - Start) / 1000) + ' sec. FILE:'+inttostr(FileList.Count);
end;
Пытался в ручную вписывать имя таблицы и все равно хрень... хотя в чистом проекте данная схема прокатывает на ура :\