Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.12.18;
Скачать: CL | DM;

Вниз

Проблема с использованием dll   Найти похожие ветки 

 
LinkolnBurrows ©   (2011-09-05 13:30) [0]

Не пойму в чем проблема. создал библиотеку с 1 процедурой переноса содержимого adoquery в excel. При использовании данной библиотеки программа первый раз выполняет все как надо а на 2 или 3 раз(как повезет) критует с ошибкой: Project C:\.. .\Project1.exe faulted with message:"access violation at 0x0040636d: write od adress 0x00030c70". Process Stopped. Use Step or Run to continue.
Вот код процедуры:

procedure ExportXLSADOQ(ADOQ: TADOQuery);
var
 col, row: Integer;
 ExcelApp: Variant;
 TimeStart,TimeNow,TimeNeed: tDateTime;
begin
   FrmST := TFrmST.Create(Application);
   FrmST.Show;
   ExcelApp := CreateOleObject("Excel.Application");
   ExcelApp.WorkBooks.Add();
   ExcelApp.WorkBooks[1].WorkSheets[1].Name := "1";
   ADOQ.Active:=false;
   ADOQ.Active:=true;    

 ADOQ.last;
 for col := 0 to ADOQ.FieldCount-1 do
   begin
     ExcelApp.Workbooks[1].WorkSheets[1].cells[1,col+1]:=ADOQ.Fields[col].DisplayName;
     ExcelApp.Workbooks[1].WorkSheets[1].cells[1,col+1].ColumnWidth:=round(length(ADOQ.Fields[col].AsString)*1.3);
   end;

 ADOQ.First;
 FrmST.Gauge.MaxValue:=ADOQ.RecordCount;
 TimeStart:=Time;
 for row := 0 to ADOQ.RecordCount-1 do
   begin
     For col:=0 to ADOQ.FieldCount-1 do
       Begin
         ExcelApp.Workbooks[1].WorkSheets[1].cells[row+2,col+1].value:=ADOQ.Fields[col].AsString;
       end;
     FrmST.Gauge.Progress:=row+1;
     TimeNow:=Time;
     FrmST.Label6.Caption:=timetostr(TimeNow-TimeStart);
     TimeNeed:=((ADOQ.RecordCount/(row+1))-1)*(TimeNow-TimeStart);
     FrmST.Label5.Caption:=timetostr(TimeNeed);
     FrmST.Label4.Caption:=inttostr(row+1)+"/"+inttostr(ADOQ.RecordCount);
     ADOQ.Next;
   end;
 ExcelApp.Visible := true;
 FrmST.free;

end;


 
Медвежонок Пятачок ©   (2011-09-05 13:40) [1]

здесь два лишних элемента:

1. библиотека.
2. программа юзающая ее.


 
Anatoly Podgoretsky ©   (2011-09-05 14:00) [2]

> LinkolnBurrows  (05.09.2011 13:30:00)  [0]

Не надо ДЛЛ


 
Dimka Maslov ©   (2011-09-05 14:27) [3]

dll обычно нужна когда несколько программ используют один и тот же функционал, изменение которого должно немедленно отражаться во всех программах без их перекомпиляции. Либо когда функционал пишется с использованием разных языков программирования. Во всех остальных случаях это лишняя морока.


 
LinkolnBurrows ©   (2011-09-05 14:48) [4]

понимаю что морока просто хочу заодно научиться dll создавать + сделаю чтото типа универсальной библиотеки быстрого вывода(так для себя хочу)


 
Ega23 ©   (2011-09-05 15:57) [5]


> понимаю что морока просто хочу заодно научиться dll создавать
> + сделаю чтото типа универсальной библиотеки быстрого вывода(так
> для себя хочу)


- Как забить гвоздь микроскопом?
- Гвозди забиваются молотком, микроскоп используется для других целей.
- Понимаю, но хочу научиться микроскопом пользоваться + сделать универсальный гвоздезабиватель.


 
Dimka Maslov ©   (2011-09-05 17:34) [6]


>  LinkolnBurrows ©   (05.09.11 14:48) [4]


универсальная библиотека быстрого вывода (так для себя) легко создаётся через pas-файл, присовокупляемый ко всем подряд проектам. Чтобы научиться делать dll достаточно создать одну единственную dll с одной единственной функцией, которую и вызвать из своей программы. Параллельно можно внимательно прочитать опус в начале исходного файла с предупреждением о возможных проблемах с dll. От себя добавлю, что передача в/из dll объектов есть дополнительный способ приобретения проблем.


 
DiamondShark ©   (2011-09-06 19:59) [7]


> procedure ExportXLSADOQ(ADOQ: TADOQuery);

А нефиг компоненты передавать.
Если уж так приспичило, передавайте родные АДОшные интрефейсы, COM для того и придуман, чтобы всё куда попало передавать.
А дельфёвые компоненты очень не любят, когда их потрошат два независимых менеджера памяти.


 
DiamondShark ©   (2011-09-06 20:01) [8]


> Во всех остальных случаях это лишняя морока.

Монолитный экзешник на 100500 МБ -- это как орденский знак олдскульного дельфятника.



Страницы: 1 вся ветка

Текущий архив: 2011.12.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
2-1315253407
Captcha
2011-09-06 00:10
2011.12.18
Программный выбор элемента в ComboBox


15-1314712629
Арксант
2011-08-30 17:57
2011.12.18
Загрузка в Image часть изображения


2-1315465617
user1987
2011-09-08 11:06
2011.12.18
Вывод текста на рабочий стол


2-1315378230
Виктор
2011-09-07 10:50
2011.12.18
Предупреждение


15-1315168191
Юрий
2011-09-05 00:29
2011.12.18
С днем рождения ! 5 сентября 2011 понедельник