Форум: "Начинающим";
Текущий архив: 2009.04.19;
Скачать: [xml.tar.bz2];
ВнизОшибка 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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.054 c