22.02.2002, 15:45 | #1 |
Участник
|
Как выполнить запрос созданный в переменной
Например я хочу сделать такое:
в какой либо переменной я создаю запрос типа str s; s = "select * from inventtable where itemid = 'sss' " вот, как мне его теперь выполнить. а нужно мне просто способ , которым я бы мог бы создавать динамический запрос. т.е. менять имя таблицы, т.е. выборку делать из таблиц в моем списке. а вообще делаю программку которая позволяет делать поиск техта по всем таблицам и полям, что бы если к примеру ошиблись номером заказа или еще чего. я беру делаю поиск и выясняю все таблицы и строки в которых существует данная строка и меняю везде, и вроде как ошибок быть не должно. вот |
|
22.02.2002, 19:42 | #2 |
Участник
|
Штатное средство построения динамического запроса - семейство классов QueryBuild*.
Это удобнее, чем сперва генерировать строку с выражением, а потом его разбирать. если уж очень хочется исполнять строку как код, то посмотри на класс Statement |
|
26.02.2002, 06:22 | #3 |
Участник
|
Привет, Ddadream!
Выполнить такой запрос, который ты написал, действительно нелегко... Но есть такое средство - семейство классов Dictionary (это самый главный дед этого семейства). Там есть и DictTable, и DictField... да и чего там только нет. То есть ты можешь организовать цикл по всем таблицам (или, скажем, по всем BaseEnums)Аксапты довольно просто. А чтобы выполнить селект, попробуй такой код: Common common; DictTable dictTable; Counter Counter; ; dictTable = new DictTable(tablenum(inventTable));// Ну это так, например... common = dictTable.makeRecord(); select count(RecId) from common; Counter = common.RecId;
__________________
С уважением, Андрей Беседин |
|
26.02.2002, 12:41 | #4 |
Участник
|
Не, Anrew.
Это еще извратнее, чем через Statement. Посмотрите на класс SysDatabaseList метод New: ... if (sqlSystem::databaseBackendId() == databaseid::MS_SQL_SERVER) resultSet = stmt.executeQuery('/*SP*/ SELECT NAME FROM [MASTER]..[SYSDATABASES] ORDER BY NAME'); if (sqlSystem::databaseBackendId() == databaseid::ORACLE) resultSet = stmt.executeQuery('SELECT USERNAME FROM ALL_USERS ORDER BY USERNAME'); ... Вы уверены, что хотите заниматься особенностями SQL'ей? А кроме того, Акспату запускали на MySQL.... |
|
26.02.2002, 12:48 | #5 |
Участник
|
Ага, ну вот есть поле для деятельности.
ну вообще я так думаю что это было бы просто на VC++ написать, к тому же заготовки уже есть. ну все равно помучаюсь если не получится, что ж. сделаю по другому. А что действительно правда что на MySQL запускали? обязательно попробую. интересно. |
|
26.02.2002, 12:58 | #6 |
Участник
|
Здравствуйте, Сергей!
Ну, насчет извращений - это уж у каждого свое, сорри Скорее всего, мы по-разному поняли задачу Дdadream'а. С моей точки зрения, самое главное для него - это получить СПИСОК объектов системы. А с Вашей - это ВЫПОЛНИТЬ запрос. Есть разница?
__________________
С уважением, Андрей Беседин |
|
26.02.2002, 13:29 | #7 |
Участник
|
Ну вообщем уточню. что бы было всем понятно.
список таблиц и полей я уже получил, теперь осталось только выполнить запрос и все. как вытащить список я нашел в форме SysSqlAdmin. |
|
26.02.2002, 13:43 | #8 |
Участник
|
Хм... Наверное.
Цитата:
создаю запрос типа...
а нужно ... динамический запрос. Цитата:
а вообще делаю ... поиск техта по всем таблицам и полям...
а вообще Может я ошибаюсь... но "по всем ... полям" - это включая поля без индексов? ddadream, вы оценили нагрузку на сервер и сеть, которую будет генерить ТАКОЙ запрос из клиентского приложения? Сама постановка вопроса мне не кажется правильной. Может в консерватории подправить? |
|
26.02.2002, 13:47 | #9 |
Участник
|
Насчет MySQL'я.
По крайней мере, ответы на вопросы по MySQL'ю были на сайте damgaard'а. Теперь убрали. |
|
26.02.2002, 16:56 | #10 |
Участник
|
А не подскажите ли мне случайно, где это в SQLe находится такой вот хитрый поиск?
я это решил сделать не потому что мне делать вроде как нечего, а хотелось бы отслеживать кое какие изменения в базе. а в MS SQL я просто не смог найти этого... по всем полям, это имелось ввиду именно по всем полям, конечно же и без индексов. потому что индексы там имеют 10-20% полей от их общего количества. |
|
26.02.2002, 18:23 | #11 |
сибиряк
|
Может эта stored процедура поможет?
(смотри приаттаченный файлик) В свое время, когда возникла необходимость узнать какое значение аксапты куда разбежалось по разным таблицам пришлось накидать нечто подобное. Запускается на SQL-Server, выполняется в Query An-er'e. Если чего-то не работает, то не обессудьте <b>2ddadream</b> А идея насчет поиска по всем таблицам системы очень даже неплоха. По крайней, на раннем этапе, даже эта простенькая процедура помогла приблизиться к пониманию работы системы. В свободное время тоже попытаюсь реализовать подобное в Аксапте.
__________________
С уважением, Вячеслав. |
|
26.02.2002, 19:02 | #12 |
Участник
|
Да вот это действительно помогло, да еще + на сервере выполняется и даже достаточно быстро.
Спасибо! Slava. |
|
27.02.2002, 14:57 | #13 |
Участник
|
Цитата:
Изначально опубликовано ddadream
А не подскажите ли мне случайно, где это в SQLe находится такой вот хитрый поиск? Цитата:
Изначально опубликовано ddadream
я это решил сделать не потому что мне делать вроде как нечего, а хотелось бы отслеживать кое какие изменения в базе. а в MS SQL я просто не смог найти этого... Можно и в Аксапте Меню Сервис \ Параметры \ Закладка SQL Мне кажется, что Query Analyzer удобнее. Цитата:
Изначально опубликовано ddadream
по всем полям, это имелось ввиду именно по всем полям, конечно же и без индексов. |
|