Makary155 Opublikowano 22 Lutego 2010 Udostępnij Opublikowano 22 Lutego 2010 Witam. Mam za zadanie napisać w pascalu program, który ma pobrać dane z tabeli bazy utworzonej w Accessie używając odbc. Czy mógłby ktoś podać przykładowe połączenie z plikiem .mdb i w jaki sposób pobrać te dane? Oczywiście nie podano mi żadnych wskazówek lub nawet czego szukać. Będę bardzo wdzięczny za wszelką pomoc. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marmot Opublikowano 23 Lutego 2010 Udostępnij Opublikowano 23 Lutego 2010 Nigdy nie korzystałem z ODBC, ale w przykładach dołączonych do Free Pascala znalazłem taki kod: Program TestODBC; uses odbcsql; Const DBDSn : Pchar = 'FPC'; Empty : pchar = ''; Query : pchar = 'SELECT Id,Username,InstEmail from FPdev Order by UserName'; // Adapt to needs... {$ifdef linux} UserName : pchar = 'michael'; // for mysql test. Password : pchar = 'geen'; {$else} UserName : pchar = ''; // for MS-Acces test. Password : pchar = ''; {$endif} Function ODBCSuccess (Res : Integer) : Boolean; begin ODBCSuccess:= (res=SQL_SUCCESS) or (res=SQL_SUCCESS_WITH_INFO); end; Var EnvHandle : SQLHandle; DBHandle : SQLHandle; StmtHandle : SQLHSTMT; ResID : Longint; ResName : Array[0..255] of char; // Matches length of field+1 ResEmail : Array[0..255] of char; Procedure FreeHandles; begin If assigned(StmtHAndle) then SQLFreeHandle(SQL_HANDLE_STMT,StmtHandle); If assigned(dbhandle) then SQLFreeHandle(SQL_HANDLE_DBC,DBHandle); If assigned(EnvHandle) then SQLFreeHandle(SQL_HANDLE_ENV,EnvHandle); end; Procedure DoError (Msg : String;ErrCode : Integer); begin FreeHandles; Writeln(Msg,' Code : ',ErrCode); Halt(1); end; Procedure StartSession; Var Res : Integer; begin EnvHandle:=nil; DBHandle:=nil; StmtHandle:=nil; Res:=SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, EnvHandle); if Res <> SQL_SUCCESS then DoError('Could allocate ODBC handle',Res); Res:=SQLSetEnvAttr(EnvHandle,SQL_ATTR_ODBC_VERSION, SQLPOINTER(SQL_OV_ODBC3), 0); If Not ODBCSuccess(res) then DoError('Could not set environment',Res); Res:=SQLAllocHandle(SQL_HANDLE_DBC, envHandle, DBHandle); If res<>SQL_SUCCESS then DoError('Could not create database handle',res); Res:=SQLConnect(DBHandle,PSQLCHAR(DBDSN),SQL_NTS, PSQLChar(UserName),SQL_NTS, PSQLCHAR(Password),SQL_NTS); If Not OdbcSuccess(res) then DoError('Could not connect to datasource.',Res); end; Procedure ExecuteStatement; Var Res,ErrCode : LongInt; begin Res:=SQLAllocHandle(SQL_HANDLE_STMT,DBHandle,stmtHandle); If not ODBCSuccess(res) then DoError('Could not allocate statement handle.',Res); { Bind result buffers. Note that for many queries, the result is not known on beforehand, And must be queried with SQLPrepare, SQLNumResulCols and SQLDescribeCol before the statement is executed.} SQLBindCol(stmtHandle,1,SQL_INTEGER,SQLPointer(@ResID),4,@ErrCode); SQLBindCol(stmtHandle,2,SQL_CHAR,SQLPointer(@ResName),256,@ErrCode); SQLBindCol(stmtHandle,3,SQL_CHAR,SQLPointer(@ResEmail),256,@ErrCode); // Now actually do it. Res:=SQLExecDirect(StmtHandle,Query,SQL_NTS); if not ODBCSuccess(res) then DoError('Execute of statement failed.',Res); end; Procedure ShowResult; Var Count,Res : Longint; begin Res:=SQLFetch(StmtHandle); Count:=0; While Res<>SQL_NO_DATA do begin Inc(Count); Write('Record: ',Count,' : '); Writeln(ResId,' ',PChar(@ResName[0]),' ',Pchar(@ResEmail[0])); Res:=SQLFetch(StmtHandle); end; end; begin StartSession; ExecuteStatement; ShowResult; FreeHandles; end. Sądzę, że jakieś szczegóły znajdziesz w dokumentacji unita odbcsql z Free Pascala. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Makary155 Opublikowano 24 Lutego 2010 Autor Udostępnij Opublikowano 24 Lutego 2010 Znam ten przykład i niezbyt on chce działać, a w dokumentacji offline nie ma informacji o odbc. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marmot Opublikowano 24 Lutego 2010 Udostępnij Opublikowano 24 Lutego 2010 http://www.freepascal.org/docs-html/packag...csql/index.html U góry sobie tam wybierz co chcesz, stałe, typy czy funkcje. (chociaż nie wiem czy cokolwiek to pomoże, brak opisu działania, tylko funkcje i argumenty) Jak coś, to znalazłem jeszcze takie coś: http://wiki.freepascal.org/ODBCConn . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Makary155 Opublikowano 25 Lutego 2010 Autor Udostępnij Opublikowano 25 Lutego 2010 Dzięki, jednak sobie daruję ten program. Nie potrafię tak pracować że koleś rzuca jakieś hasło i napisz pan program a jak spytam czego mam użyć to 'a znajdź se w google'. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się