OberonCore
https://forum.oberoncore.ru/

Базы данных без предварительной настройки DSN
https://forum.oberoncore.ru/viewtopic.php?f=5&t=393
Страница 1 из 1

Автор:  sacred [ Четверг, 01 Март, 2007 23:44 ]
Заголовок сообщения:  Базы данных без предварительной настройки DSN

Возможно ли?
В других системах разработки можно указать ConnectionString, в которой прописываются параметры (например путь к базе и используемый драйвер) и можно работать без предварительных псевдонимов в DSN. Если, к примеру, нужно создать просмотрщик dbf-файлов, то ведь не создавать же для каждой папки, где может найтись dbf-файл свою запись в DSN ODBC? Кто-нибудь победил это?

Автор:  Trurl [ Пятница, 02 Март, 2007 13:30 ]
Заголовок сообщения:  Re: Базы данных без предварительной настройки DSN

sacred писал(а):
Если, к примеру, нужно создать просмотрщик dbf-файлов, то ведь не создавать же для каждой папки, где может найтись dbf-файл свою запись в DSN ODBC?

А зачем?
DSN="Файлы dBASE"
SELECT * FROM C:\DATA\PATH\TABLE.DBF

Автор:  Иван Горячев [ Пятница, 02 Март, 2007 13:37 ]
Заголовок сообщения:  Re: Базы данных без предварительной настройки DSN

У меня сотня dbf в разных каталогах. "Файлы dBASE 0".."Файлы dBASE 99"?

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

Автор:  Trurl [ Пятница, 02 Март, 2007 13:46 ]
Заголовок сообщения:  Re: Базы данных без предварительной настройки DSN

Ivor писал(а):
У меня сотня dbf в разных каталогах. "Файлы dBASE 0".."Файлы dBASE 99"?

Нипонил. Зачем "Файлы dBASE 0".."Файлы dBASE 99"? Просто "Файлы dBASE".

Автор:  sacred [ Пятница, 02 Март, 2007 13:54 ]
Заголовок сообщения:  Re: Базы данных без предварительной настройки DSN

Trurl писал(а):
DSN="Файлы dBASE"
SELECT * FROM C:\DATA\PATH\TABLE.DBF

Сууупер!
А нельзя ещё так: где-то указать (не в DSN!) путь к какому-нибудь каталогу, и в запросах SQL уже полный путь не указывать?

Автор:  Иван Горячев [ Пятница, 02 Март, 2007 13:56 ]
Заголовок сообщения:  Re: Базы данных без предварительной настройки DSN

Я конечно мало работал с ODBC, но там вроде одна запись DSN на одну БД? А один dbf-файл считается одной БД. Вот и выходит, что на каждый файл приходится лепить свою запись. Или я не прав?

Автор:  sacred [ Пятница, 02 Март, 2007 14:03 ]
Заголовок сообщения:  Re: Базы данных без предварительной настройки DSN

Ivor писал(а):
Я конечно мало работал с ODBC, но там вроде одна запись DSN на одну БД? А один dbf-файл считается одной БД. Вот и выходит, что на каждый файл приходится лепить свою запись. Или я не прав?

В общем случае - неправ. Во-первых для dbf-типа баз, базой считается не файл, а каталог с файлами, а каждый файл - таблица. Во-вторых, в общем случае создавать записи в DSN вообще не нужно, достаточно того, что в системе есть соответствующий ODBC драйвер. Можно к нему обратиться и указать любые параметры типа путь к базе, пароль, и т.д, не изпользуя DSN. К счастью, оказывается и в BlackBox можно почти то же самое делать.

Автор:  Trurl [ Пятница, 02 Март, 2007 14:43 ]
Заголовок сообщения: 

Большинство драйверов все-таки требует указания DSN.
Цитата:
А нельзя ещё так: где-то указать (не в DSN!) путь к какому-нибудь каталогу, и в запросах SQL уже полный путь не указывать?

Можно, но во-первых придется переписать SqlOdbc, а во-вторых это будет сильно зависит от драйвера ODBC. Например, для того же dbf у dBase и FoxPro драйверов разные параметры.
А не проще ли в DSN указать использовать текущий каталог и менять его по мере надбности?

Автор:  sacred [ Пятница, 02 Март, 2007 15:30 ]
Заголовок сообщения: 

Trurl писал(а):
А не проще ли в DSN указать использовать текущий каталог и менять его по мере надбности?

Как его собссна менять? Через WinApi? Мож фукнцию навскидку помните?

Автор:  Илья Ермаков [ Пятница, 02 Март, 2007 15:41 ]
Заголовок сообщения: 

Да эта... WinApi.SetCurrentDir, кажись...

Автор:  Trurl [ Пятница, 02 Март, 2007 15:50 ]
Заголовок сообщения: 

SetCurrentDirectory

Автор:  sacred [ Воскресенье, 04 Март, 2007 23:24 ]
Заголовок сообщения:  Пока ещё неполная русификация?

Спасибо всем за помощь.
Однако траблы не прекращаются. :)
Запускаю SQL\Browser. Пишу Database: Файлы dBASE, Driver: SqlOdbc3
Statement - без разницы какой, не в нём дело. Жму Execute - есть подключение! Смотрю исходник SqlBrowser, копирую из него код:
Код:
IF table = NIL THEN
   SqlDB.OpenDatabase("SqlOdbc3", "", "", "Файлы dBASE", TRUE, TRUE, database, res);
   IF res = 0 THEN
      table := database.NewTable();
   ELSIF res <= 3 THEN
      Dialog.ShowMsg("#Sql:CannotLoadDriver")
   ELSE
      Dialog.ShowMsg("#Sql:ConnectionFailed")
   END
END;

Имею ConnectionFailed (типа не указан драйвер). Пытаюсь найти различия. Вставляю в код текст: Log.String("Файлы dBASE");
Т.к. заподозрил, что что-то с кодировками. В логе русские буквы - не печатаются... Зашёл в тупик. Помогите. Установлен BlackBox 1.5 SP 4.01 всё скачано с этого сайта.

Автор:  Trurl [ Понедельник, 05 Март, 2007 09:17 ]
Заголовок сообщения: 

Попробуйте переименовать "Файлы dBASE" в "dBASE files".

Автор:  sacred [ Понедельник, 05 Март, 2007 11:46 ]
Заголовок сообщения: 

Trurl писал(а):
Попробуйте переименовать "Файлы dBASE" в "dBASE files".

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

И, кстати, SqlBrowser-то работает с "Файлы dBASE", и не жужжит...

Вы будете смеяться, я на убогом 1С могу подключаться к любым базам данных (ну может не совсем к любым, но на проблемы пока не натыкался), просто указав строку подключения и всё! Никаких настроек в DSN делать не нужно.

Скажите правду: я многого хочу? :)
Стандартная подсистема SQL так не умеет? Надо брать MSDN в зубы и кодить, кодить, кодить?

Автор:  Trurl [ Понедельник, 05 Март, 2007 12:37 ]
Заголовок сообщения: 

Скорее всего, проблема при компиляции строки и дальнейшей её интерпретации.
Вообще же "Файлы dBASE" - DNS который создаётся при установке DAC. Но его может и не быть. Например если винда нерусская или пользователь просто удалил ненужный DNS. Так что лучше проверить наличие и/или создать новый.
Сделать это можно разными способами:
функцией SQLConfigDataSource
добавить запись в ODBC.INI или в реестр
([HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI] или
[HKEY_CURRENT_USER\SOFTWARE\ODBC\ODBC.INI])

Автор:  Trurl [ Понедельник, 05 Март, 2007 12:55 ]
Заголовок сообщения: 

Ещё предложение. Копируем SqlOdbc3 и меняем в нем вызов SQLConnect на SQLDriverConnect.

Автор:  sacred [ Понедельник, 05 Март, 2007 16:15 ]
Заголовок сообщения: 

Круто. Ну это просто спасибо огромное. Я бы сам долго искал. Буду пробовать.
Остаётся только осадочек из-за:
Цитата:
Скорее всего, проблема при компиляции строки и дальнейшей её интерпретации.

Т.е. вопрос неполной русификации, но это к моей задаче прямого отношения не имеет, это так, в целом.

СПАСИБО!

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/