Прочитане на Access със Querty

13 отговора 315 прегледа
#1

Прочитане на Access със Querty

Трябва да извеждам едни справки от база данни, написани с Access 2000. И разбира се искам всичко да направя със SQL заявки (за по-лесно). Та въпросът ми е: някой правил ли е нещо подобно, и как става точно. Всякакви идеи са добре дошли.

Отговор
в отговор на Mилeнa #2

Re: Прочитане на Access със Querty

Ами става много лесно. Трябва да се използват ADO компонентите.
Значи слагаш си ADOQuery, задаваш му Connection String към DSN (който се създава предварително от Control Panel и сочи към Access базата ти от данни). След като си настроиш връзката ползваш AdoQuery.SQL.Text := "Заявката която ти трябва" (можеш да ползваш заявки генерирани и от самият Access), а после викаш ExecSQL, или Open методите на AdoQuery в зависимост от това дали заявката връща резултат.
Ако имаш още проблеми пиши.

AquilaX

____________
умният знае кога да говори, мъдрият знае кога да мълчи
Отговор
в отговор на AquilaX #3

Re: Прочитане на Access със Querty

Това добре, обаче не искам да минавам през ODBC драйвера. Програмата ще работи с няколко бази данни от Access, разположени в различни директории, настройките на ODBC - то трябва да се правят ръчно (поне не знам как става от програмата). С една дума - ако може директно.

Отговор
в отговор на Mилeнa #4

Re: Прочитане на Access със Querty

е ще ти трябват някакви Native драйвери за Access. Иначе DNS се създава и програмно макар да не е толкова лесно колкото би трябвало да е т.е. от Borland не са го направили. Може да използваш следното нещо :


const
ODBC_ADD_DSN = 1; // Add data source
ODBC_CONFIG_DSN = 2; // Configure (edit) data source
ODBC_REMOVE_DSN = 3; // Remove data source
ODBC_ADD_SYS_DSN = 4; // add a system DSN
ODBC_CONFIG_SYS_DSN = 5; // Configure a system DSN
ODBC_REMOVE_SYS_DSN = 6; // remove a system DSN
type
TSQLConfigDataSource = function( hwndParent: HWND;
fRequest: WORD;
lpszDriver: LPCSTR;
lpszAttributes: LPCSTR ) : BOOL; stdcall;


function TfmUpdate.CreateMDBDSN(FileName, DSNName, Description:String):boolean;
var
pFn: TSQLConfigDataSource;
hLib: LongWord;
strDriver: string;
strHome: string;
strAttr: string;
strFile: string;
fResult: BOOL;
srInfo : TSearchRec;
begin
Result := True;
strFile := FileName;
strHome := ExtractFilePath (FileName);
hLib := LoadLibrary( 'ODBCCP32' ); // load from default path
if( hLib <> NULL ) then
begin
@pFn := GetProcAddress( hLib, 'SQLConfigDataSource' );
if( @pFn <> nil ) then
begin
// force (re-)create DSN
strDriver := 'Microsoft Access Driver (*.mdb)';
strAttr := Format( 'DSN='+DSNName+#0+
'DBQ=%s'+#0+
'Exclusive=1'+#0+
'Description='+Description+#0+#0,
[strFile] );
fResult := pFn( 0, ODBC_ADD_SYS_DSN, @strDriver[1], @strAttr[1] );
if( fResult = false ) then Result := False;
// test/create MDB file associated with DSN
if( FindFirst( strFile, 0, srInfo ) <> 0 ) then
//strFile := '.\\TestData.MDB';
begin
strDriver := 'Microsoft Access Driver (*.mdb)';
strAttr := Format( 'DSN='+DSNName+#0+
'DBQ=%s'+#0+
'Exclusive=1'+#0+
'Description='+Description+#0+
'CREATE_DB="%s"'#0+#0,
[strFile,strFile] );
fResult := pFn( 0, ODBC_ADD_SYS_DSN, @strDriver[1], @strAttr[1] );
if( fResult = false ) then Result := False;
end;
FindClose( srInfo );
end;
(* MASSIVE SNIP *)
FreeLibrary( hLib );
end
else
begin
Result := False;
end;
end;



Успех!

AquilaX

P.S Сигурно може да използваш и OLE Automation ама мене нещо не ме кефи това а сигурно е и бавно.

____________
умният знае кога да говори, мъдрият знае кога да мълчи

Редактирано от AquilaX на

Отговор
в отговор на Mилeнa #5

Re: Прочитане на Access със Querty

Hi,

По добрия варинт при ADO e да използваш Jet провайдер за директен достъп до Access, но за Access 2000 ще трябва да имаш и последните update-и от Borland. Но не очаквай голяма скорост и ще има проблеми при справки от таблици от различни бази.

Засега толкова, като имаш конкретни проблеми...

Миро.

Отговор
в отговор на Miro #6

Re: Прочитане на Access със Querty

Благодаря на всички които ми отговориха. Вече всичко е ок.

Отговор
в отговор на Mилeнa #7

Re: Прочитане на Access със Querty

Hi,

За съжаление нищо няма да е ОК с ADO !

Проблемите ти тепърва започват... но питай и може и да стане. Освен това може да следиш и newsgroup-ата на Borland за ADO - там има доста теми....

Миро.

Отговор
в отговор на Miro #8

Re: Прочитане на Access със Querty

Вярно е за проблемите с ADO аз не ги бях ползвал, но едно приятелче дето се мъчи с тях, ми разправяше какви гимнастики прави за да им избегне бъговете :)

Отговор
в отговор на Eмилиo #9

Re: Прочитане на Access със Querty

Хммм...

Позната история . Не ме питай аз какви гимнастики правя .
Но сега правя една последна - зарязвам ADO и се прехвърлям на Interbase .

Tnx,

Miro.

Отговор
в отговор на Miro #10

Re: Прочитане на Access със Querty

:)))) Не си мисли че там няма да има хватки... по малко са но не са болка за умиране ;) Аз си бачкам на Interbase от 2-3 год, и не ми правят впечатление :)

Отговор
в отговор на Eмилиo #11

Re: Прочитане на Access със Querty

Hi,

Предполагам, че Interbase ще се държи добре при 5-6 потребителя, 20000-50000 записа?

Миро.

Отговор
в отговор на Miro #12

Re: Прочитане на Access със Querty

Даже да ти кажа честно ме учуди Interbase ка се държи... в едното от заведенията което работи с ресторантьорската ми система, в мрежата са 6 компютъра - 4 каси и 1 за справки и 1 за въвеждане на покупки и кетеринг...
в момента базата е 120MB, най тежката част са Real Time покупките и там има до момента към 300 000 - 400 000 записа...
Начи справките по часове, по заведения, по артикули, хронологията продажби по часове и т.н.. има към 30 вида справки, най тежките се правят за около 5-6 сек.!!!!
А на касите които набиват там информация нон стоп, има забавяне само 1-2 сек...
Но сега съм решил да прехвърля цялата система на SQL Server, да видя и там как ще се държи :)))

Отговор
в отговор на Eмилиo #13

Re: Прочитане на Access със Querty

Hi,

И как ще правиш достъпа до MS SQL Server? ADO?

Миро.

Отговор
в отговор на Miro #14

Re: :)))))))

Като му дойде времето, ще го мисля... и май с ADO ще е ...

Отговор