Вопрос № 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.
Сама база данных лежит тут 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 то получаешт содержимое в гриде.
--------- Если дело заслуживает быть сделаным, то оно заслуживает чтобы его сделали ХОРОШО
Отвечает: 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"
Так и здесь, кто-то должен записывать соответствие сокращенных и полных названий полей. НАиболее эффективно сделать в БД таблицу этих соответствий и из них формировать дерево. Но в таблице исправлять придеться вручную
--------- Если дело заслуживает быть сделаным, то оно заслуживает чтобы его сделали ХОРОШО