|
#1
|
||||
|
||||
Мои исходники
В этой теме я буду размещать ссылки на свои исходники которые, по ряду причин (в основном потому, что я считаю их неплохими примерами для начинающих) я решил выложить на сайте.
Ну-с, начнем... ...и раз.. Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#2
|
||||
|
||||
Сразу ляп обнаружился.
1.Для подключения вы используете строку подключения ODBC, где описание драйвера идет на русском языке, а у меня базовая - английская версия офиса и соответственно имя драйвера по английски. 2.Вы создаете строку подключения динамичекси, (непонятно почему у вас сразу ошибки не вылезло) и делаете ее очень куцую. Нельзя из строки подключения выбрасывать драйвер. Пришлось поправить к такому виду: Код:
DM.MainConnection.ConnectionString:=Format(ConnStr,[Format('Provider=MSDASQL.1;Data Source=MS Access Database;Initial Catalog=%s',[ExtractFilePath(Application.ExeName)+'bakery.mdb'])]); Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 12.05.2009 в 22:01. |
#3
|
||||
|
||||
Никакой драйвер никуда я не выбросил, смотри внимательно
А то что data source по русски - тут уж я не ставил перед собой целью всем угодить, пример все ж таки больше демонстрационный. Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#4
|
||||
|
||||
Ага, посмотрел. Действительно константа имеется. Виноват не заметил.
Но все-же имейте ввиду, что имя драйвера может быть и по английски. А вообще, впечатления очень положительные. Молодца. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
||||
|
||||
Посмотрев на пожелания общественности набросал небольшой модуль который помогает решить проблему непонятки с с именами драйверов ODBC.
Сразу скажу - тестировал мало, поэтому могут быть баги. Код:
unit odbc_func; { Модуль для получения информации о ODBC драйверах установленных в системе (c) Aristarh Dark (2009) e-mail: aristarh.dark@gmail.com Зависимости: Classes, SysUtils, Windows, Registry, StrUtils } {.$DEFINE debug} interface uses Classes; function GetODBCDriversNamesList(DrvNamesList:TStrings):boolean; function GetODBCDriversList(DrvNames,DrvList:TStrings):boolean; function GetFileExtnsByODBCDriverName(DriverName:string;var FileExtns:string):boolean; function GetODBCDriverNameByFileExtns(FileExtns:string; var DriverName:string):boolean; function GetODBCDriversNamesByFileExtns(FileExtns:string; DriversNames:TStrings):boolean; implementation uses SysUtils, Windows,Registry, StrUtils {$IFDEF debug} , Dialogs {$ENDIF} ; function GetODBCDriversNamesList(DrvNamesList:TStrings):boolean; { Получение названий установленных в систему драйверов ODBC (пользовательский уровень) DrvNamesList - объект в который будут выгружены названия драйверов ВОЗВРАТ - логика, говорящая об успехе операции Aristarh Dark 2009-05-15 } var Reg:TRegistry; begin Result:=False; Reg:=TRegistry.Create(KEY_READ); try if Reg.OpenKey('\Software\ODBC\ODBC.INI\ODBC Data Sources', False) then begin Reg.GetValueNames(DrvNamesList); Result:=True; end; finally Reg.Free; end; end; function GetODBCDriversList(DrvNames,DrvList:TStrings):boolean; { Получение имен установленных драйверов ODBC (пользовательский уровень) DrvNames - список названий драйверов (см. GetODBCDriversNamesList) DrvList - объект в который будут выгружены имена драйверов ВОЗВРАТ - логика, говорящая об успехе операции Aristarh Dark 2009-05-15 } var Reg:TRegistry; i:integer; begin Result:=False; DrvList.Clear; Reg:=TRegistry.Create(KEY_READ); try if Reg.OpenKey('\Software\ODBC\ODBC.INI\ODBC Data Sources', False) then begin for i:=0 to DrvNames.Count-1 do DrvList.Append(Reg.ReadString(DrvNames[i])); Result:=True; end; finally Reg.Free; end; end; function GetFileExtnsByODBCDriverName(DriverName:string;var FileExtns:string):boolean; { Возвращает расширения файлов для драйвера ODBC DriverName - имя драйвера ODBC (см. GetODBCDriversList) FileExtns - переменная куда будут выгружена строка с расширениями ВОЗВРАТ - логика, говорящая об успехе операции Aristarh Dark 2009-05-15 } var Reg:TRegistry; begin Result:=False; FileExtns:=''; Reg:=TRegistry.Create(KEY_READ); try Reg.RootKey:=HKEY_LOCAL_MACHINE; if Reg.OpenKey(Format('\Software\ODBC\ODBCINST.INI\%s',[DriverName]), False) then begin FileExtns:=Reg.ReadString('FileExtns'); Result:=True; end; finally Reg.Free; end; end; function GetODBCDriverNameByFileExtns(FileExtns:string; var DriverName:string):boolean; { Возвращает название ODBC драйвера (для использование в ConnectionString (ADO)) по расширению(ям) файла базы данных ПРИМЕЧАНИЕ: Данная функция возвращает только первый найденный драйвер FileExtns - расширение файла в виде ".xxx" или список расширений в виде ".xxx;.yyy;.zzz" DriverName - переменная в которую будет выгружено имя драйвера ODBC ВОЗВРАТ - логика, говорящая об успехе операции Aristarh Dark 2009-05-15 } var sl:TStringList; DriversNamesList,DriversList:TStringList; i,j:integer; FileExt:string; begin Result:=False; DriverName:=''; //разберем строку расширений (на случай если более одного) sl:=TStringList.Create; sl.Delimiter:=';'; sl.DelimitedText:=FileExtns; {$IFDEF debug} ShowMessage(IntToStr(sl.Count)); {$ENDIF} //Ну и сам поиск драйвера DriversNamesList:=TStringList.Create; DriversList:=TStringList.Create; if GetODBCDriversNamesList(DriversNamesList) then if GetODBCDriversList(DriversNamesList,DriversList)then begin for i:=0 to DriversList.Count-1 do begin for j:=0 to sl.Count-1 do if GetFileExtnsByODBCDriverName(DriversList[i],FileExt) then if pos(Trim(sl[j]),FileExt)>0 then begin DriverName:=DriversNamesList[i]; Result:=True; Break; end; if Length(DriverName)>0 then Break; end; end; DriversList.Free; DriversNamesList.Free; sl.Free; end; function GetODBCDriversNamesByFileExtns(FileExtns:string; DriversNames:TStrings):boolean; { Возвращает название всех ODBC драйверов (для использование в ConnectionString (ADO)) связанных расширением(ями) файла базы данных FileExtns - расширение файла в виде ".xxx" или список расширений в виде ".xxx;.yyy;.zzz" DriversNames - переменная в которую будут выгружене имена драйверов ODBC ВОЗВРАТ - логика, говорящая об успехе операции Aristarh Dark 2009-05-15 } var sl:TStringList; DriversNamesList,DriversList:TStringList; i,j:integer; FileExt:string; begin DriversNames.Clear; sl:=TStringList.Create; sl.Delimiter:=';'; sl.DelimitedText:=FileExtns; DriversNamesList:=TStringList.Create; DriversList:=TStringList.Create; if GetODBCDriversNamesList(DriversNamesList) then if GetODBCDriversList(DriversNamesList,DriversList)then for i:=0 to DriversList.Count-1 do for j:=0 to sl.Count-1 do if GetFileExtnsByODBCDriverName(DriversList[i],FileExt) then if pos(Trim(sl[j]),FileExt)>0 then DriversNames.Append(DriversNamesList[i]); DriversList.Free; DriversNamesList.Free; sl.Free; Result:=True; end; end. Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |