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

Вниз

Ошибка ADO?   Найти похожие ветки 

 
пикассо   (2009-03-04 13:28) [0]

Всем привет!
Подскажите, плиз, почему может вылетать такая ошибка?
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EAccessViolation with message "Access violation at address 4DD10C50 in module "sqloledb.dll". Read of address 766F4902". Process stopped. Use Step or Run to continue.
---------------------------
OK   Help  
---------------------------
На строчке:
AdoQuery.SQL.Text := "select * from table";

что у меня слетело?


 
clickmaker ©   (2009-03-04 13:29) [1]

> На строчке:
> AdoQuery.SQL.Text := "select * from table";

точно на этой? сомнительно как-то...


 
пикассо   (2009-03-04 13:31) [2]


> clickmaker ©   (04.03.09 13:29) [1]

сам в ах... удивлен...


 
KSergey ©   (2009-03-04 13:34) [3]

все врешь
у меня на этой строчке не вылетает.


 
clickmaker ©   (2009-03-04 13:38) [4]

> [2] пикассо   (04.03.09 13:31)

вот "расшифровка" этой строчки
procedure TADOQuery.SetSQL(const Value: TStrings);
begin
 FSQL.Assign(Value);
end;

в ней нет ничего, что могло бы как-то "возбудить" sqloledb.dll
единственный вариант, приводящий к AV - ADOQuery вообще не создано


 
пикассо   (2009-03-04 13:39) [5]


> KSergey ©   (04.03.09 13:34) [3]

ага, сейчас на другой машинке попробовал: все ок...
ЧТО у меня слетело? Может поменять этот sqloledb.dll?

ЗЫ. если поможет, выслать оригинальный?


 
clickmaker ©   (2009-03-04 13:41) [6]

то есть, конечно же

procedure TStrings.SetTextStr(const Value: string);
var
 P, Start: PChar;
 S: string;
begin
 BeginUpdate;
 try
   Clear;
   P := Pointer(Value);
   if P <> nil then
     while P^ <> #0 do
     begin
       Start := P;
       while not (P^ in [ #0, #10, #13]) do Inc(P);
       SetString(S, Start, P - Start);
       Add(S);
       if P^ = #13 then Inc(P);
       if P^ = #10 then Inc(P);
     end;
 finally
   EndUpdate;
 end;
end;

никакого отношения к sqloledb.dll


 
clickmaker ©   (2009-03-04 13:46) [7]

хотя... ошибка может вылететь в

procedure TCustomADODataSet.SetCommandText(const Value: WideString);
begin
 if CommandText <> Value then
 begin
   CheckInactive;
   Command.CommandText := Value;
   PropertyChanged;
 end;
end;

я бы отладчиком зашел бы в недра adodb.pas, и там бы уже более конкретную строчку нашел


 
Эстет   (2009-03-04 13:47) [8]

Я, конечно, не силен, но в соседней ветке (http://delphimaster.net/view/2-1236094118/) sniknik © утверждает, что может. Мотивируя глюком "одной из версии обертки ADO".


 
clickmaker ©   (2009-03-04 13:52) [9]

> [5] пикассо   (04.03.09 13:39)

а там разные версии?
и программа одна и та же, ну в смысле, собрана в одной версии дельфи?


 
пикассо   (2009-03-04 13:56) [10]


> clickmaker ©   (04.03.09 13:52) [9]

нет, все одинаковое...
Раньше-то этого не было!


 
clickmaker ©   (2009-03-04 14:00) [11]

> [10] пикассо   (04.03.09 13:56)

а что-то устанавливалось на комп с того момента, могущее как-то перезаписать адошные дллки?


 
sniknik ©   (2009-03-04 14:10) [12]

версия без разницы, в любом случае при внесении запроса идет попытка получения типов параметров (если есть), в той версии о которой говорил борланд сделал "в лоб", по логике из BDE  что внесли в запрос то и передавали в обьект ADO,
и т.к. многие зачем то пишут так
add(select *);
add(from);
add(...);
....
add(...);
то естественно часть запроса валидной не являлась...
после исправили сделали типа "накопление" всех частей, а передачу после.

т.е. это был не глюк ADO, а глюк реализации от борланда конкретно ADOQuery.


 
пикассо   (2009-03-04 14:21) [13]


> clickmaker ©   (04.03.09 14:00) [11]

нет...

ADODB.pas

ошибка вылезает тут:

function TParameters.InternalRefresh: Boolean;
   procedure RefreshFromOleDB;
   .....
       if Assigned(CommandPrepare) then CommandPrepare.Prepare(0);
.....

если глуже, то тут:

System

procedure       _HandleAnyException;
asm
{$IFDEF PC_MAPPED_EXCEPTIONS}
       CMP     ECX, UW_EXC_CLASS_BORLANDCPP    // C++ exception?
       JNE     @@handleIt                      // nope, handle it
       // C++ exceptions aren"t wanted here.  Retoss them as is
       CALL    SysRaiseCPPException

@@handleIt:
       PUSH    EAX
       PUSH    EDX
       CALL    UnblockOSExceptions
       POP     EDX
       POP     EAX

       // If the exception is a Delphi exception thrown from C++, coopt it.
       CALL    MaybeCooptException

       OR      [EAX].TRaisedException.Flags, excIsBeingHandled
       CALL    LinkException
       MOV     ESI, EBX
       MOV     EDX, [ESP]
       CALL    NotifyExcept
       MOV     EBX, ESI
{$ENDIF}
{$IFNDEF  PC_MAPPED_EXCEPTIONS}
       { ->    [ESP+ 4] excPtr: PExceptionRecord       }
       {       [ESP+ 8] errPtr: PExcFrame              }
       {       [ESP+12] ctxPtr: Pointer                }
       {       [ESP+16] dspPtr: Pointer                }
       { <-    EAX return value - always one   }

       MOV     EAX,[ESP+4]
       TEST    [EAX].TExceptionRecord.ExceptionFlags,cUnwindInProgress
       JNE     @@exit

       CMP     [EAX].TExceptionRecord.ExceptionCode,cDelphiException
       MOV     EDX,[EAX].TExceptionRecord.ExceptObject
       MOV     ECX,[EAX].TExceptionRecord.ExceptAddr
       JE      @@DelphiException
       CLD
       CALL    _FpuInit
       MOV     EDX,ExceptObjProc
       TEST    EDX,EDX
       JE      @@exit
       CALL    EDX
       TEST    EAX,EAX
       JE      @@exit
       MOV     EDX,[ESP+12]
       MOV     ECX,[ESP+4]
       CMP     [ECX].TExceptionRecord.ExceptionCode,cCppException
       JE      @@CppException
       CALL    NotifyNonDelphiException


 
пикассо   (2009-03-04 14:43) [14]

а вот такой вопросик: я тут недавно в реестре увлекся удалением всяких ключиков, гм... "лишних" - может поэтому? И, если да, то как исправить?


 
brother ©   (2009-03-04 14:46) [15]

> И, если да, то как исправить?

откати систему на предыдущее состояние)


 
clickmaker ©   (2009-03-04 14:46) [16]

> как исправить?

переустанови MDAC


 
KSergey ©   (2009-03-04 14:56) [17]

> пикассо   (04.03.09 14:43) [14]
> а вот такой вопросик: я тут недавно в реестре увлекся удалением всяких ключиков, гм... "лишних" - может поэтому?

легко. оно ж все на COM, а COM сильно на реест повязан.

Обожаю людей, "оптимизирующих" реестр. хочется всех передавить разом, чес. слово. не к автору это, так, эмоции.


 
KSergey ©   (2009-03-04 14:58) [18]

> clickmaker ©   (04.03.09 14:46) [16]
> переустанови MDAC

Легко сказать. Если уже стоит посл. версия - все, приехали. Или я чего-то не знаю?

впрочем, вариант просто перезарегистрировать типы из dll-ки, возможно так же связанные. см. regsvc32


 
пикассо   (2009-03-05 12:48) [19]

Итак, переустановил виндовз - ошибка осталась, но теперь отладчик говорит, что в другой длл-ке - msvcrt.dll.
 Пробую сделать чистый проект, выполняю те же действия - все ок.

Ошибка вылезает только при присвоении св-ва SQL.Text, если запрос был задан заранее - все работает.

При запуске приложения создается модуль данных и главная форма. В OnCreate модуля данных стоит ADOConnection.Open;

Все больше ничего не выполняется. Код, вызывающий ошибку:

   with ADOQuery1 do begin
     Close;
     SQL.Clear;
     SQL.Text := " INSERT INTO inter ([name]) VALUES (:name) ";//вот тут
     Parameters.ParamByName("NAME").Value := "asfasdf";
     ExecSQL;
   end;

Пробовал на другой машине - скомпиленная прога выполняется - но там Виста.

Что это?


 
clickmaker ©   (2009-03-05 13:47) [20]

> [19] пикассо   (05.03.09 12:48)

любой запрос? или только с параметрами?
попробуй поменять имя параметра... глупость, вроде, но фиг знает
скорей всего, какая-то очень экзотическая ошибка АДО


 
пикассо   (2009-03-05 14:16) [21]


> clickmaker ©   (05.03.09 13:47) [20]

 Нет, а?! Ну кто бы мог подумать? Причем ругается из-за названия таблицы - internet_publishing... И на параметр "name" тоже!

спасибо большое!

PS. Зато девственно чистая windows!



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

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

Наверх




Память: 0.52 MB
Время: 0.032 c
11-1174764339
Dmitriy___
2007-03-24 22:25
2009.04.19
Перехват ресайза колонок ListView


15-1235057883
Бурато
2009-02-19 18:38
2009.04.19
Алгебра


3-1219735607
TNT
2008-08-26 11:26
2009.04.19
IBQuery и Filter


15-1234696527
Юрий
2009-02-15 14:15
2009.04.19
Портрет пользователей delphimaster.ru


3-1219843455
Алина
2008-08-27 17:24
2009.04.19
Проверка выделенной строки в DBGrid и использ-е типа поля memо