Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: СУБД и Delphi/Lazarus

  Все выпуски  

RusFAQ.ru: СУБД и Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / СУБД и Delphi

Выпуск № 244
от 21.11.2006, 03:35

Администратор:CJ
В рассылке:Подписчиков: 288, Экспертов: 32
В номере:Вопросов: 3, Ответов: 5


Вопрос № 62687: Здравствуйте. 1) Подскажите, как написать SQL запрос к InterBase в Delphi 7… К парадоксу писал так: SQL.Add('SELECT ID, Name, Avtor, Izd, God, Vid, Sp'); SQL.Add('FROM ":PPT:1.db"'); SQL.Add('WHERE'); SQL.Add('(God =...
Вопрос № 62730: Приветствую, уважаемые эксперты. Не уверен, что обращаюсь по адресу, но тема схожа. Вопрос заключается в следующем: работа через ODBC интерфейс с БД под управлением Firebird. Обязательно ли перед освобождением дескриптора SQL выражения (SQLFreeHa...
Вопрос № 62742: Глобальнейший вопрос для новичка. Создаю БД в Delphi + InterBase. На одной из форм открываю БД в гриде и здесь же есть объект TreeView, в котором хранятся условия отображения отчета в форме дерева (например, "Показывать таккие-то поля" или ...

Вопрос № 62.687
Здравствуйте.
1) Подскажите, как написать SQL запрос к InterBase в Delphi 7…
К парадоксу писал так:
SQL.Add('SELECT ID, Name, Avtor, Izd, God, Vid, Sp');
SQL.Add('FROM ":PPT:1.db"');
SQL.Add('WHERE');
SQL.Add('(God = "'+ God + '")');
SQL.Add('ORDER BY Name');
где PPT – псевдоним, а 1.db – имя файла БД.
Пробовал аналогичный к InterBase, выходит ошибка “Table does not exist“.
2) Как автоматически при загрузке Win XP стартовать InterBase Server v. 6.5.0.28? Сейчас запускаю так: Открываю IBConsole, щёлкаю по Local Server, ввожу имя, пароль и он стартует…
Отправлен: 15.11.2006, 06:15
Вопрос задал: ALL_mikky (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 11)

Отвечает: sir henry
Здравствуйте, ALL_mikky!
Аналогом работы с IB является работа с Акцесовской базой. В IB все таблицы точно так-же хранятся в одном файле базы данных.
1. Нужно установить коннект с базой данных.
2. Открыть базу данных.
3. Выполнить запрос к одной или нескольким таблицам.
Например в БД у Вас есть таблица работников rabotniki с полями ID, NAME, DOLJNOST, ZARPLATA. Тогда запрос к таблице будет выглядеть так:
SELECT name, doljnost, zarplata FROM rabotniki
WHERE zarplata>10000
ORDER BY name
Естественно, прежде чем выполнять запрос, Вы должны создать как саму базу данных, так и необходимые Вам таблицы, тогда ошибки типа “Table does not exist“ у Вас выскакивать не будут, т.к. Вы точно будете знать, какие таблицы и с какими именами у Вас существуют в базе данных.
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 15.11.2006, 07:12
Оценка за ответ: 4
Комментарий оценки:
Попробовал так:

SQL.Add('SELECT ID, Name, Avtor, Izd, God, Vid, Sp');
SQL.Add('FROM "table1"');
SQL.Add('WHERE');
SQL.Add('(God = "'+ God + '")');
SQL.Add('ORDER BY Name');

Ошибка:

Table does not exist. File or directory not exits.

File: D:Program FilesBorlandDelphi7Projects able1.db
… able1.dbf
… able1.txt
… able1

Сама база данных лежит тут D:Program FilesBorlandInterBaseinBOOKPPT.GDB
Создана таблица: TABLE1, с атрибутами: NAME, AVTOR, IZD, GOD, VID, SP, TEXT.
При запуске соединение с БД происходит, ввожу имя, пароль.
Кнопка
procedure TForm1.Button3Click(Sender: TObject);
begin
DataSource2.DataSet:=Table1;
end;
загружает все данные. В свойстве Table1 указано Datab aseName: PPT2 – её псевдоним, в TableName: TABLE1.

Отвечает: Архангельский Андрей Германович
Здравствуйте, ALL_mikky!

1) Соединение с IB идет в два этапа:
- на форму бросается компонент IBDatabase, в котором указывается путь к БД (возможно сетевой), логин и пароль, роль пользовтеля и диалект.
- потом бросается компонент IBTransaction, в котором указывается ссылка на IBDatabase и поведение трансакций.
- после этого кладется компонент IBQuery и DBDataSource, ссоответствующими ссылками.
ПОсле этого в IBQuery.SQL.Add('Select * from Table where ... order...');
И открываешь запрос.
ЕСли к Query прицеплен DBGrid то получаешт содержимое в гриде.

---------
Если дело заслуживает быть сделаным, то оно заслуживает чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Практикант)
Ответ отправлен: 15.11.2006, 11:11

Отвечает: Viktor_sh
Здравствуйте, ALL_mikky!
К последнему ответу добавлю, Вам многое надо забыть, что вы умели делать в Paradox, IB - это совсем другая СУБД, SQL-серверная.
Почитайте, вот здесь:
http://www.interbase-world.com/ru/firebird/,
там написано о FB бесплатном аналоге IB.
Ответ отправил: Viktor_sh (статус: 1-ый класс)
Ответ отправлен: 15.11.2006, 21:28


Вопрос № 62.730
Приветствую, уважаемые эксперты. Не уверен, что обращаюсь по адресу, но тема схожа.
Вопрос заключается в следующем: работа через ODBC интерфейс с БД под управлением Firebird. Обязательно ли перед освобождением дескриптора SQL выражения (SQLFreeHandle(SQL_HANDLE_STMT, qSel)) предварительно закрывать курсор, который как указано в MSDN автоматически создается при исполнении выражения функциями SQLExecute или SQLExecDirect. Или же курсор будет корректно закрыт автоматически.
Возможно так же не там копаю - подскажите пожалуйста, если кто сталкивался с такой ситуацией:
ODBC API, Firebird диалект 3, обращения к БД из разных потоков синхронизируюся с помощью мьютексов, однако при попытке сделать дисконнект, а затем зарушить хендлы connection и environment происходит зависание программы, причем судя по детальным собственным логам намертво - вместе со всеми дочерними потоками и динамимески подключенными DLL.
Отправлен: 15.11.2006, 11:21
Вопрос задал: Tek (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Архангельский Андрей Германович
Здравствуйте, Tek!

1) Ну не работайте с ODBC (и с BDE тоже) устаревшая и не эффективная технология со множеством проблем.
2) Используйте компоненты прямого доступа:
- IBX - встроен в Delphi
- IBObjects - самая лучшая библиотека прямого доступа к IB/FB
- FIBPlus - самая популярная (по причине дешевизны)

И просто забудете об этих проблемах. Только что писал примеры для книги в разных вариантах - после IBObjects проблемы с IBX (не говоря уже про ODBC и BDE) доводили до бешенства.
---------
Если дело заслуживает быть сделаным, то оно заслуживает чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Практикант)
Ответ отправлен: 15.11.2006, 11:51
Оценка за ответ: 4
Комментарий оценки:
Раз: ODBC не устареет еще доооолго, пока не создадут что-нибудь
аналогичного(прослойки между программером и движком БД)
Два: наша софтина работает и на mdb(MS) и на FB и стало быть ооочень не хочеться
вести 2 проекта.
Три: прямой доступ чреват своими затыками - ВСЕГДА и ВЕЗДЕ, если только вы не мазохист.
Странно слышать призывы к использованию средств прямого доступа к БД от
(однофамильца или автора?) книг по RAD'ам ;)
PS: Все-таки вы однофамилец или автор талмудов (в хорошем смысле:) по Delphi и Builder'у?
А ответа я так и не получил :)


Вопрос № 62.742
Глобальнейший вопрос для новичка. Создаю БД в Delphi + InterBase. На одной из форм открываю БД в гриде и здесь же есть объект TreeView, в котором хранятся условия отображения отчета в форме дерева (например, "Показывать таккие-то поля" или "Группировать записи"). В другой форме у меня созданы несколько переменных типа TStrings, в качастве хранилищ информации. В эти переменные мне необходимо занести названия всех полей на русском языке (в самой БД названия в виде сокращений: FAME-фамилия), но динамически. то есть при изменении названия поля не надо было вручную его исправлять, а это делал бы машинный код, созданный ранее. большая просьба привести пример такого кода, если это вообще возможно сделать.
Отправлен: 15.11.2006, 12:30
Вопрос задала: Lanita (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Архангельский Андрей Германович
Здравствуйте, Lanita!

где-то в году 1983, когда я занимался разработкой процессоров, были большие споры об автоматическом программировании. И тогда Юра Отрохов сказал - "Кто-то должен написать первую команду MOV"
Так и здесь, кто-то должен записывать соответствие сокращенных и полных названий полей. НАиболее эффективно сделать в БД таблицу этих соответствий и из них формировать дерево. Но в таблице исправлять придеться вручную
---------
Если дело заслуживает быть сделаным, то оно заслуживает чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Практикант)
Ответ отправлен: 15.11.2006, 12:57
Оценка за ответ: 2


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное