![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подключить бы БД Access в рантайме в User DSN... [D7]
GL00m © (2006-02-06 01:34:00)Есть БД Access (*.mdb). Хотелось бы в программе подключить эту БД в User DSN (чтобы не прописывать вручную в ODBC Data Source Administrator). Я подозреваю, что это как-то можно сделать, но догадываюсь, что не хватает знаний...
Я думал, что видел в форуме как-то, но сейчас не смог найти. Помогите, плз!
GL00m (2006-02-06 21:37:00) [1]Спасибо, все получилось: сделал ADOConnection, там Microsoft Jet OLEDB и в качестве Data Source указал файл *.mdb. Дальше, как я понял, все не сильно отличается от работы с mySQL через dbExpress.
Еще раз всем спасибо!
msguns (2006-02-06 09:48:00) [2]
function TdmLibr.DB_Open: boolean;
begin
result := true;
with cnLibr do
if not Connected then
try
ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;'+
'Data Source='+MainForm.Path_To_Database+';'+
'Persist Security Info=False';
LoginPrompt := false;
Open;
except
result := false;
end;
end;
GL00m (2006-02-06 09:36:00) [3]Круто. Спасибо! Пойду переваривать, разбираться и все такое. Если что, вернусь и спрошу. =))
Личность (2006-02-06 09:34:00) [4]r0.ru + ADO + Delphi + examples :)
piople (2006-02-06 09:33:00) [5]
type
TSQLConfigDataSource =
function(hwndParent: Integer;
fRequest: Integer;
lpszDriverString: string;
lpszAttributes: string): Smallint; stdcall;
function SQLConfigDataSource(hwndParent: Integer; fRequest: Integer;
lpszDriverString: string; lpszAttributes: string): Integer; stdcall;
var
func: TSQLConfigDataSource;
OdbccpHMODULE: HMODULE;
begin
OdbccpHMODULE := LoadLibrary('c:\WINDOWS\SYSTEM\odbccp32.dll');
if OdbccpHMODULE = 0 then
raise Exception.Create(SysErrorMessage(GetLastError));
func := GetProcAddress(OdbccpHMODULE, PChar('SQLConfigDataSource'));
if @func = nil then
raise Exception.Create('Error Getting adress for SQLConfigDataSource' +
SysErrorMessage(GetLastError));
Result := func(hwndParent, fRequest, lpszDriverString, lpszAttributes);
FreeLibrary(OdbccpHMODULE);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if SQLConfigDataSource(0, 1, 'Microsoft Excel Driver (*.xls)',
Format('DSN=%s;DBQ=%s;DriverID=790', ['MyDSNName',
'c:\temp\temp.xls'])) <> 1 then
ShowMessage('Cannot create ODBC alias');
end;
Delphi World вообще полезная штука :)
GL00m (2006-02-06 09:33:00) [6]Извиняюсь, нашел: Microsoft Jet OLEDB в TADOConnection. Оно?
GL00m (2006-02-06 09:28:00) [7]Спасибо огромное, но один вопрос:
Jet? Это где такое? Это как-то связано с ADO?
sniknik (2006-02-06 09:23:00) [8]ну так посмотри на существующий (создай руками), после найди его в реестре по ключевому слову (названию)... вот и все, в рантайме надо эти записи повторить. (можно также библиотеку ODBC задействовать, там есть фунция на создание (тем же методом, она сама в реестр пищет, только от тебя скрыто))
но вообще какой смысл использовать устаревшие методы и еще себе же проблемы устраивать? делай подключение через Jet, он алиасов вообще не требует.
GL00m (2006-02-06 09:17:00) [9]Да-да-да, точно! =)
piople (2006-02-06 06:21:00) [10]Программным путем создать алиас чтоли?