|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Хранение запросов в файле MS Access
В программе используется ADO и БД Access. Запросы SQL необходимо хранить вне тела программы, чтобы была возможность их изменения без перекомпиляции. Хранить запросы в отдельных файлах - неудобно (при переносе программы на другой компьютер). MS Access дает возможность хранить запросы непосредственно в файле БД. Собственно вопрос: как использовать данную возможность из Delphi. Заранее спасибо.
|
#2
|
||||
|
||||
Да так-же как и таблицы, через запрос. Только вместо "Create table ..."используется "Create view ..."
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
Я, наверное, неправильно выразился. Мне надо файле Access хранить текст запроса. А в компоненту ADOQuery - подгружать его динамически. Из отдельного файла - это функция ADOQuery.SQL.LoadFromFile(), а как из файла Access загрузить текст запроса с определенным именем?
|
#4
|
||||
|
||||
Если я правильно понял, то вам нужен исходный текст запроса для вьюшки сохраненной в базе. Не делал такого, но предположу что надо читать Description из схемы базы данных для вашего запроса.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
||||
|
||||
Первое поле в таблице имя запроса, второе сам запрос (хотя я предпочитаю обращаться не по имени, а по индексу).
Тебе понадобиться такая функция: Код:
function Tdm.Selects(s: string): string; var QSel: TADOQuery; begin QSel:= TADOQuery.Create(nil); QSel.Connection:= ADOConnection1; QSel.SQL.Text:= 'select {поле_где_хранится_текст_запроса} from {имя_таблицы} where {поле_имени_запроса} = '+QuotedStr('тут_имя_твоего_запроса'); QSel.Open; Result:= qSel.FieldByName('{поле_где_хранится_текст_запроса}').AsString; qSel.Close; qSel.Free; end; Код:
... ADOQuery1.SQL.Text:= Selects('TEST_SELECT'); //Вернет текст запроса с именем TEST_SELECT ... Google в помощь |
#6
|
||||
|
||||
Нет, ему не это нужно. В Акцесовской БД есть объекты: Таблицы, Запросы.
Для доступа через ADO без разницы в этом случае таблица это или запрос т.к. они располагаются в одном пространстве имен, и получить вы сможете только структуру этих объектов т.е. перечисление полей их составляющих. Но ему-то нужно не просто перечисление, а именно исходный текст запроса. Хотя если он для хранения текста запросов использует свою табличку то вероятно вы правы. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 05.12.2011 в 16:42. |
#7
|
||||
|
||||
Цитата:
Мне почему-то показалось, что ТС именно это имеет в виду. Как бы то ни было, данный мною метод весьма полезен, т.к. сам использую его в своем проекте. А если хранить запросы в квериках, то каждое изменение влечет обязательное обновление программы у всех пользователей, а эту операцию нежелательно выполнять крайне часто. Google в помощь |
#8
|
|||
|
|||
Цитата:
Цитата:
Цитата:
Вот функция, может кому-то еще пригодится. Код:
function TFmMain.GetSQLFromAcces(MyConnection:TADOConnection;SQLName:String):String; var NewADODataSet:TADODataSet; begin NewADODataSet:=TADODataSet.Create(Application); NewADODataSet.Connection:=MyConnection; MyConnection.OpenSchema(siViews, EmptyParam, EmptyParam, NewADODataSet); NewADODataSet.Locate('TABLE_NAME',SQLName,[]); Result:=VarToStr(NewADODataSet.FieldValues['VIEW_DEFINITION']); NewADODataSet.Free; end; Пример использования: ADOQuery1.SQL.Text:=GetSQLFromAcces(ADOConnection1 ,'MyTableSQL'); Последний раз редактировалось vdstud, 05.12.2011 в 18:43. |