🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.delphi.bazy-danych
4 messages
4 total messages Started by Grzegorz Skoczylas Wed, 29 Oct 2014 12:51
Delphi XE1 + ODBC = Access Violation
#82400
Author: Grzegorz Skoczylas
Date: Wed, 29 Oct 2014 12:51
12 lines
1905 bytes
Witam!

Mam następujący problem. Program jest napisany w Delphi XE. Do obsługi bazy danych używam takie komponenty jak TADOConnection, TADODataSet, TADOQuery i TADOStoredProc. Z bazą danych łączę się przez ODBC (32-bit). W administratorze ODBC źródło danych jest zdefiniowane w zakładce "Systemowe DSN".

W pewnym miejscu w programie chcę wywołać procedurę z bazy danych (TADOStoredProc). W tym celu przypisuję wartości parametrom procedury i wywołuję procedurę.

Program uruchomiony w Windows 8.1 lub w Windows 7 działa poprawnie. Ten sam program uruchomiony na Windows XP wywala błąd "Access violation" na instrukcji uruchomienia procedury.

Może ktoś miał już podobną sytuację i znalazł rozwiązanie. Z góry dziękuję za wszelkie informacje.

--
Grzegorz Skoczylas
Re: Delphi XE1 + ODBC = Access Violation
#82401
Author: wloochacz
Date: Wed, 29 Oct 2014 16:05
17 lines
2106 bytes
W dniu 2014-10-29 13:51, Grzegorz Skoczylas pisze:
> Witam!
>
> Mam następujący problem. Program jest napisany w Delphi XE. Do obsługi bazy danych używam takie komponenty jak TADOConnection, TADODataSet, TADOQuery i TADOStoredProc. Z bazą danych łączę się przez ODBC (32-bit). W administratorze ODBC źródło danych jest zdefiniowane w zakładce "Systemowe DSN".
>
> W pewnym miejscu w programie chcę wywołać procedurę z bazy danych (TADOStoredProc). W tym celu przypisuję wartości parametrom procedury i wywołuję procedurę.
>
> Program uruchomiony w Windows 8.1 lub w Windows 7 działa poprawnie. Ten sam program uruchomiony na Windows XP wywala błąd "Access violation" na instrukcji uruchomienia procedury.
>
> Może ktoś miał już podobną sytuację i znalazł rozwiązanie. Z góry dziękuję za wszelkie informacje.
Takiej nie miałem, ale coś podobnego...
Sprawdź wersję MDAC na różnych komputerach.
Sprawdź wersję sterowników ODBC na różnych komputerach.
Czy sterowniki ODBC są w odpowiedniej wersji dla aplikacji (32bit)?

-- 
wloochacz
Re: Delphi XE1 + ODBC = Access Violation
#82402
Author: Grzegorz Skoczylas
Date: Thu, 30 Oct 2014 07:53
21 lines
2486 bytes
W dniu środa, 29 października 2014 17:05:46 UTC+1 użytkownik wloochacz napisał:
> W dniu 2014-10-29 13:51, Grzegorz Skoczylas pisze:
> > [...]

Zauważyłem, że problem dotyczy tylko sytuacji, gdy instrukcja SELECT ma parametry lub gdy TADOStoredProc ma zwrócić wynik.

Rozwiązałem to tak, że zamiast używać instrukcje SELECT z parametrami, przebudowuję w kodzie treść instrukcji. W przypadku tego programu taka zmiana nie miała praktycznie żadnego wpływu na wydajność.

W przypadku procedur sprawdziłem, że uruchomienie procedury przez ExecProc() nie generuje żadnych błędów. Ja jednak musiałem użyć Active := True, ponieważ pobieram wyniki działania procedur. Obszedłem problem tak, że tworzę tablicę tymczasową. Wyniki działania procedury przekierowuję do tablicy systemowej i z niej pobieram dane instrukcją SELECT. Działa.

P.S.
Baza danych: MS SQL 2008 R2

> Sprawdź wersję MDAC na różnych komputerach.
> Sprawdź wersję sterowników ODBC na różnych komputerach.
> Czy sterowniki ODBC są w odpowiedniej wersji dla aplikacji (32bit)?

Dzięki za podpowiedź. Sterowniki ODBC wydają się być OK. Sprawdzę jeszcze wersję MDAC.

--
Grzegorz
Re: Delphi XE1 + ODBC = Access Violation
#82403
Author: Zenon Oktawiec
Date: Thu, 30 Oct 2014 14:42
36 lines
2515 bytes
W dniu 2014-10-29 17:05, wloochacz pisze:
> W dniu 2014-10-29 13:51, Grzegorz Skoczylas pisze:
>> Witam!
>>
>> Mam następujący problem. Program jest napisany w Delphi XE. Do obsługi
>> bazy danych używam takie komponenty jak TADOConnection, TADODataSet,
>> TADOQuery i TADOStoredProc. Z bazą danych łączę się przez ODBC
>> (32-bit). W administratorze ODBC źródło danych jest zdefiniowane w
>> zakładce "Systemowe DSN".
>>
>> W pewnym miejscu w programie chcę wywołać procedurę z bazy danych
>> (TADOStoredProc). W tym celu przypisuję wartości parametrom procedury
>> i wywołuję procedurę.
>>
>> Program uruchomiony w Windows 8.1 lub w Windows 7 działa poprawnie.
>> Ten sam program uruchomiony na Windows XP wywala błąd "Access
>> violation" na instrukcji uruchomienia procedury.
>>
>> Może ktoś miał już podobną sytuację i znalazł rozwiązanie. Z góry
>> dziękuję za wszelkie informacje.
> Takiej nie miałem, ale coś podobnego...
> Sprawdź wersję MDAC na różnych komputerach.
> Sprawdź wersję sterowników ODBC na różnych komputerach.
> Czy sterowniki ODBC są w odpowiedniej wersji dla aplikacji (32bit)?
>

Potwierdzam: w XP były problemy z MDAC, które objawiały się właśnie 
takimi jajami w ODBC.  Pomagał upgrade MDAC'a. Ale już nie pamiętam 
jakiegp i skąd należało brać - dawno już ODBC nie używałem.


-- 
pzdr,
Z.

Zwiedzaj Kraków:    http://www.przewodnik-miejski.krakow.pl
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads