RUS  ENG 

Обращение к базе данных

Страницы: 1 2 След.
RSS
Обращение к базе данных
 
Здравствуйте, пишу програмку на Delphi 7 использую объекты Zulu 6 Возникла необхонимость выборки данных по нескольким условиям (не по ключу) возможно ли ето реализовать не используя перебора данных? Как вариант аналог SQL запроса... Спасибо.
 
Да, можно. См. ZbQueryInfo.QueryByExample - условия запроса туда передаются в том же виде как в окне браузера базы данных.
 
Не подскажите как задать условия для нескольких полей, с одним разобрался (oZQ.QueryByExample('=1','f1', i, oZDS)), а вот для нескольких (f1=10 and f2=12 and f3 like '%стр%' - SQL аналог) ну никак не получается... Спасибо.
 
Строки запроса можно разделять знаком переноса строки (код ASCII 10):
oZQ.QueryByExample('=1'+Chr(10)+'=2'+Chr(10)+'*стр*','f1'+Chr(10)+'f2'+Chr(10)+'f3', i, oZDS))
 
Большое спасибо! Все получилось...
 
Добрый день! При помощи FindDownstream получаю набор ключей элементов ElementKeys, а после необходимо поднять описание данных элементов из базы, отсюда вопрос - есть ли возможность выбрать из базы данных записи удовлетворяющие условию попадает в список
(аналог SQL: SELECT F1 FROM t1 WHERE F1 IN (1,2,10,15,80,90))? Спасибо.
 
Метод есть: IZbQueryInfo.SelectByKeySet
http://www.politerm.com.ru/zulu5doc/zuluax/IZbQueryInfo_SelectByKeySet.htm
 
Этот метод я смотрел, но не до конца понял как он работает, теперь вроде разобрался как искать по строке с раздилителем ASCII 10, но так и не смог понять как искать сразу по массиву не преобразовывая его в строку, подскажите пожалуйста возможно ли это... Было бы оч хорошо искать сразу по ElementKeys...
 
Параметры KeySet и OptionsOrCount задают список ключей, по которым нужно сделать выборку.
Варианты могут быть такие:
1. KeySet=<путь>, OptionsOrCount=zbkoTextFile - список ключей в виде текстового файла, в котором каждая строка содержит одно численное значение ключа
2. KeySet=SafeArray<VT_I4> - список ключей в виде массива OLE safearray чисел.
3. KeySet=<VT_I4|VT_BYREF - адрес на первый ключ>, OptionsOrCount=Count - список ключей в виде массива чисел (в KeySet передается адрес на первый элемент, в OptionsOrCount - число элементов.
 
Большое спасибо за разъяснение, а то из справки что то не совсем было ясно...
 
Добрый день!
Подскажите пожалуйста есть ли аналог SQL запроса выборки нескольких полей данный по условию?
В методах QueryByExample можно задавать условия, но выбираются все поля, а в SelectByKeySet можно определить список полей для вывода, но выборка происходит только по ключам.
Есть ли подобный метод в котором можно задать условия выборки и определить список полей для вывода?
 
Цитата
SerPa написал:
Добрый день!
Подскажите пожалуйста есть ли аналог SQL запроса выборки нескольких полей данный по условию?
В описании можно посмотреть:
https://www.politerm.com/zuludoc/zuluax/index.html#Layer_ExecSQL.html
https://www.politerm.com/zuludoc/zuluax/index.html#MapDoc_ExecSQL.html
https://www.politerm.com/zuludoc/zuluax/index.html#ZbDatabase_ExecSQLEx.html

Пример:
https://www.politerm.com/samples/zulugis/macros/mat_har/
 
Написал макрос:
Set L = CreateObject("zululib.Layer")
L.Open "C:\Users\sergio\Documents\Zulu\АС_Тепло\HNetSystem.b00"
Set db = CreateObject("Zb.ZbDatabase")
db.Open L.ObjectTypes.Item(6).BaseName
SqlText = "SELECT Name, Gut_pod, Gut_obr, Qpot_pod, Qpot_obr"
Set rs = db.OpenSQL(,SqlText)
при выполнении выдает ошибку:
"Ошибка ZB db(C:\Users\sergio\Documents\Zulu\АС_Тепло\HNetSystem.d05):no such column: Sys (db: C:\Users\sergio\Documents\Zulu\АС_Тепло\HNetSystem.sqlite)."
В тоже время Set rs = db.ActiveQuery.SelectByExample(QueryStrings, Fields) работало без проблем.

Не могу понять в чем я ошибаюсь.
 
Цитата
SqlText = "SELECT Name, Gut_pod, Gut_obr, Qpot_pod, Qpot_obr"
Set rs = db.OpenSQL(,SqlText)
при выполнении выдает ошибку:
"Ошибка ZB db(C:\Users\sergio\Documents\Zulu\АС_Тепло\HNetSystem.d05):no such column: Sys (db: C:\Users\sergio\Documents\Zulu\АС_Тепло\HNetSystem.sqlite)."
В тоже время Set rs = db.ActiveQuery.SelectByExample(QueryStrings, Fields) работало без проблем.

Не могу понять в чем я ошибаюсь.
Как минимум, поля Name скорее всего в участках нет
 
Нет, все поля есть, и в окне запросов SQL выполняется без ошибок
SELECT Name, Gut_pod, Gut_obr, Qpot_pod, Qpot_obr

Здесь дело в чем-то другом

Прошу помочь
 
Цитата
SerPa написал:
Нет, все поля есть, и в окне запросов SQL выполняется без ошибок
SELECT Name, Gut_pod, Gut_obr, Qpot_pod, Qpot_obr

Здесь дело в чем-то другом

Прошу помочь
В окне запросов SQL выполняется к слою. Это уже наш SQL адаптированный.
При запросе SQL к базе выполняется SQL запрос с синтаксисом той СУБД, в которой хранятся таблицы. У Вас SELECT даже FROM не содержит.

Если с реальным SQL не очень знакомы, выполняйте, как в оке т.е. именно Layer.ExecSQL
 
А это уже проблемы документации.

Нигде не описано в каких случаях использовать тот или иной SQL. Вот и приходится задавать глупые вопросы.
Поясните пожалуйста , где взять имя БД, подключенной к слою для вставки в запрос после FROM?
 
Цитата
SerPa написал:
А это уже проблемы документации.

Нигде не описано в каких случаях использовать тот или иной SQL. Вот и приходится задавать глупые вопросы.
Поясните пожалуйста , где взять имя БД, подключенной к слою для вставки в запрос после FROM?
Во FROM ставится имя таблицы (https://en.wikipedia.org/wiki/From_(SQL)).
https://www.politerm.com/zuludoc/zuluax/index.html#IZbTables_cls.html
 
Цитата
SerPa написал:
А это уже проблемы документации.

Нигде не описано в каких случаях использовать тот или иной SQL. Вот и приходится задавать глупые вопросы.
Поясните пожалуйста , где взять имя БД, подключенной к слою для вставки в запрос после FROM?
И еще раз. Откройте данные по участку и убедитесь, что там есть поле Name
 
Спасибо, да именно таблицы, вы правы.
С файловой картой все получилось, однако когда тот же макрос выполняю на сервере Zulu падает с ошибкой:

 
Цитата
SerPa написал:
Спасибо, да именно таблицы, вы правы.
С файловой картой все получилось, однако когда тот же макрос выполняю на сервере Zulu падает с ошибкой:
Какой номер релиза (Справка\О программе)? Какая СУБД используется на сервере?
Пришлите текст макроса.
Пришлите слой на [email protected] телефон для связи.
 
Версия 8.0.0.7257u
СУБД MS SQL Server 2008 R2
Файлы выслал.
 
Вопрос. Как выковырять название базовой таблицы к основному запросу по определенному типу слоя. т.е. к каждому типу есть своя БД, у нее есть несколько таблиц и несколько запросов. Один из запросов является основным . В этом запросе есть базовая таблица с полем связи с геометрическими объектами. Нужно ее имя.
 
Цитата
Aly написал:
Вопрос. Как выковырять название базовой таблицы к основному запросу по определенному типу слоя. т.е. к каждому типу есть своя БД, у нее есть несколько таблиц и несколько запросов. Один из запросов является основным . В этом запросе есть базовая таблица с полем связи с геометрическими объектами. Нужно ее имя.
Основной запрос: https://www.politerm.com/zuludoc/zuluax/index.html#ZbDatabase_ActiveQuery.html
Поле связи с картой: ActiveQuery->VisualQuery->BaseField (https://www.politerm.com/zuludoc/zuluax/index.html#IZbVisualQuery_BaseField.html)
Владелец поля: https://www.politerm.com/zuludoc/zuluax/index.html#IZbFieldInfo_Source.html
 
Aly, добрый день!
  1. C помощью Layer.ObjectTypes.Item(typeid).BaseID можно получить ID базы у нужного типа.
  2. С помощью Layer.Bases.ItemById(id).Open() можно открыть базу с указанным ID и получить объект ZbDatabase
  3. Zb.Queries.Default вернёт основной запрос в виде объекта IZbQueryInfo.
  4. Дальше https://www.politerm.com/zuludoc/zuluax/index.html#IZbQueryInfo_VisualQuery.html для анализа структуры запроса
  5. https://www.politerm.com/zuludoc/zuluax/index.html#IZbVisualQuery_BaseField.html
  6. https://www.politerm.com/zuludoc/zuluax/index.html#IZbFieldInfo_Source.html
  7. https://www.politerm.com/zuludoc/zuluax/index.html#IZbTableRef_Table.html
  8. https://www.politerm.com/zuludoc/zuluax/index.html#IZbTableInfo_Name.html
Страницы: 1 2 След.