powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / select .... into ... в PB + MySQL
9 сообщений из 9, страница 1 из 1
select .... into ... в PB + MySQL
    #34141856
В коде приложения:

select max( column_1 )
into :var_1
from table_1
using transaction_1;

При выполнении приложения возникает ошибка:

SQLSTATE = 37000
[MySQL][ODBC 3.51 Driver][mysqld-4.1.12-nt]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '( column_1) from table_1' at line 1

Простой запрос по базе из того же PB работает:
select max( column_1 )
from table_1;

В чем дело???? Помогите пожалуйста !!!!
...
Рейтинг: 0 / 0
select .... into ... в PB + MySQL
    #34143360
Сделал через динамический курсор:

DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA;
string sqlstatement
sqlstatement = "SELECT max(column_1) FROM table_1";
PREPARE SQLSA FROM :sqlstatement using transaction_1;
OPEN DYNAMIC my_cursor;
FETCH my_cursor INTO :var_1;
CLOSE my_cursor ;
...
Рейтинг: 0 / 0
select .... into ... в PB + MySQL
    #34143536
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для того чтобы успешно парсить embedded SQL (НЕ динамический) PB должен знать особенности синтаксиса. Особенности эти для разных ODBC драйверов описаны в файлике pbodb90.ini (не забывайте положить этот файлик когда ставите приложение клиенту ;-)
Имя секции должно совпадать с названием драйвера (в девятке можно посмотреть в Database Painter -> Driver Information -> SQL_DBMS_NAME)

Хотя возможно это решается просто параметром каким нть в DBParm.
В MySQL есть какой-ть профайлер или трейс? может билдеровским "trace ODBC" посмотреть ЧТО именно PB отправляет за statement?

Зорин А.
"I love deadlines. I like the whooshing sound they make as they fly by."
-- Douglas Adams

З.Ы. IMHO, надо бы разобраться а не затычку делать в виде dynamic SQL.
...
Рейтинг: 0 / 0
select .... into ... в PB + MySQL
    #34143673
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗоринАндрейIMHO, надо бы разобраться а не затычку делать в виде dynamic SQL.
Поддерживаю. А то уж больно на простом запросе проблема возникла. Что-то тут нечисто :)
...
Рейтинг: 0 / 0
select .... into ... в PB + MySQL
    #34144339
ZhV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я бы сделал так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
ls_sql  = "select max( column_1 ) max_val  from table_1"
ls_synt = transaction_1.SyntaxFromSQL(as_sql, "style(type=grid)", ls_error)
IF ls_error='' THEN
   i = lds_temp.Create(ls_synt,ls_error)  
   IF i> 0  AND ls_error='' THEN 
          i = lds_temp.settransobject( transaction_1)
          IF i> 0  THEN 
             i = lds_temp.Retrieve()
             IF i= 1  THEN 
                ll_var1 = lds_temp.object.max_val[ 1 ] 
             END IF

          END IF
   END IF
END IF 

В ls_error - сообщения с приличной диагностикой ошибок

Поскольку у меня для упражнений с SQL есть отдельный обьект, то это выглядит еще короче

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
i = lnv_sql_service.of_create_by_sql(lds_temp,"select max( column_1 ) max_val  from table_1",SQLCA)
IF i>= 0  THEN 
         i = lds_t.Retrieve()
         IF i= 1  THEN 
             ll_var1 = lds_t.object.max_val[ 1 ] 
         END IF
END IF

Очевидно, что в отличие от Embedded SQL - в данном случае строку SQL можно сделать очень даже переменной - и по именам таблиц и по именам переменных в них. То есть нетрудно дописать первый фрагмент до функции универсального определения max
Код: plaintext
1.
2.
3.
4.
5.
// f_get_max_from_table(as_table, as_column, a_transaction)
...
ls_sql ="select max("+as_column+") max_val  from "+as_table

// см. выше
...
Рейтинг: 0 / 0
select .... into ... в PB + MySQL
    #34144493
Спасибо всем и просто за сочувствие, и за дельные советы; кое-что уже применил
...
Рейтинг: 0 / 0
select .... into ... в PB + MySQL
    #34144742
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZhVА я бы сделал так

Ужас какой!
...
Рейтинг: 0 / 0
select .... into ... в PB + MySQL
    #34145194
ZhV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗоринАндрей ЗоринАндрей
Для того чтобы успешно парсить embedded SQL (НЕ динамический) PB должен знать особенности синтаксиса. Особенности эти для разных ODBC драйверов описаны в файлике pbodb90.ini (не забывайте положить этот файлик когда ставите приложение клиенту ;-)

Ужас какой!
:)

Мне было бы лениво править код под разные варианты - то ли ODBC, то ли Native, то ли версии драйверов, то ли региональные настройки дат и разделителей чисел... Я уж не говорю про разные СУБД
Я верю в могущество Виртуальной Машины PB :) - пусть она сама разбирается с СУБД.
В данном случае она потратит раз в 10 больше времени по сравнению с embedded SQL - вместо 10 мкс целых 100 мкс. Но что поделать ленивому программисту - приходится ждать.

Приведенный пример всего лишь мелкий фрагмент от целого - системы генерации отчетов, в том числе отчеты на динамически собираемых SQL-запросах. max() - это мелочь - вот многократно вложенные select-ы и последовательности union-ов. Когда в логах смотришь потом на получишиеся SQL-операторы - самому ручками такое не нашкрябать :)
...
Рейтинг: 0 / 0
select .... into ... в PB + MySQL
    #34161088
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как показал мой опыт по "Когда в логах смотришь потом на получишиеся SQL-операторы - самому ручками такое не нашкрябать :)" потом также и самому не оттюнить,поэтому пмсм все генераторы отчетов хороши если есть возможность в шаблоне отчета подкрутить select (правда у некоторых подтюнивание только в /*+rule*/ заключается :(),потому как запариваешься outline оракловые для оптимизатора писать для таких "универсальных вещей"
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / select .... into ... в PB + MySQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]