Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Разное > Исходники и статьи
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.05.2009, 21:27
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию Мои исходники

В этой теме я буду размещать ссылки на свои исходники которые, по ряду причин (в основном потому, что я считаю их неплохими примерами для начинающих) я решил выложить на сайте.

Ну-с, начнем...

...и раз..
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #2  
Старый 12.05.2009, 21:50
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Сразу ляп обнаружился.
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  
Старый 12.05.2009, 22:11
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Никакой драйвер никуда я не выбросил, смотри внимательно
А то что data source по русски - тут уж я не ставил перед собой целью всем угодить, пример все ж таки больше демонстрационный.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #4  
Старый 12.05.2009, 22:23
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Ага, посмотрел. Действительно константа имеется. Виноват не заметил.
Но все-же имейте ввиду, что имя драйвера может быть и по английски.

А вообще, впечатления очень положительные. Молодца.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 15.05.2009, 19:05
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Посмотрев на пожелания общественности набросал небольшой модуль который помогает решить проблему непонятки с с именами драйверов 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.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:17.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter