Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PowerBuilder Новый топик    Ответить
 PB10. Ошибки внутри программы при передаче строковых переменных в SQL  [new]
web_fox
Member

Откуда: Киев
Сообщений: 444
Программа была на PB6. перенесли на PB10 и проблема.
Запускаю свою программу и вижу всередине такие проблемы, что передаётся ТОЛЬКО ПЕРВАЯ буква АНГЛИЙСКИХ строк и везде в итоге получается ошибка "no data found". На скриншоте видно, что вместо строки 'vattest' в запрос биндится буква 'v'.

Ошибка происходит на обеих бибилиотеках dbms=O84 Oracle8/8i (8.x.4+) и dbms=O90 Oracle9i (9.0.1).

Окружение: WinXP, Oracle9 client

Вопрос: почему передаётся только первая буква вместо всей строки?

К сообщению приложен файл. Размер - 0Kb
25 сен 07, 12:42    [4710966]     Ответить | Цитировать Сообщить модератору
 Re: PB10. Ошибки внутри программы при передаче строковых переменных в SQL  [new]
Dim2000
Member

Откуда: Москва
Сообщений: 5318

web_fox wrote:

> Программа была на PB6. перенесли на PB10 и проблема.
> Запускаю свою программу и вижу всередине такие проблемы, что передаётся
> ТОЛЬКО ПЕРВАЯ буква АНГЛИЙСКИХ строк

Похоже на последствия перехода от ANSI к Unicode. Но я не припомню,
чтобы у кого-то ещё была такая проблема...

Posted via ActualForum NNTP Server 1.4

25 сен 07, 12:56    [4711107]     Ответить | Цитировать Сообщить модератору
 Re: PB10. Ошибки внутри программы при передаче строковых переменных в SQL  [new]
web_fox
Member

Откуда: Киев
Сообщений: 444
Спасибо. А что момжно попробовать исправить, чтобы делу помочь?
25 сен 07, 13:28    [4711353]     Ответить | Цитировать Сообщить модератору
 Re: PB10. Ошибки внутри программы при передаче строковых переменных в SQL  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6610
web_fox
Спасибо. А что можно попробовать исправить, чтобы делу помочь?

Прежде чем попасть в запрос, строка случайно не обрабатывается в какой-то внешней DLL?
Такой эффект наблюдается когда уникодную строку передают в C ф-ю, ожидающую ANSI строку
25 сен 07, 14:53    [4712138]     Ответить | Цитировать Сообщить модератору
 Re: PB10. Ошибки внутри программы при передаче строковых переменных в SQL  [new]
PaulJB
Member

Откуда: Киев
Сообщений: 737
>> Такой эффект наблюдается когда уникодную строку передают в C ф-ю, ожидающую ANSI строку
Именно.
При миграции ПБ сам добавляет ANSI-определения в внешним ф-циям.
Но только при миграции. При экпорте нет. Надо вручную прописывать.
25 сен 07, 15:23    [4712419]     Ответить | Цитировать Сообщить модератору
 Re: PB10. Ошибки внутри программы при передаче строковых переменных в SQL  [new]
ЗоринАндрей
Member

Откуда: Санкт-Петербург
Сообщений: 3004
в базе кодировка какая? ANSI?
какой NLS_LANG на клиенте?
25 сен 07, 15:52    [4712604]     Ответить | Цитировать Сообщить модератору
 Re: PB10. Ошибки внутри программы при передаче строковых переменных в SQL  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6610
ЗоринАндрей
какой NLS_LANG на клиенте?

ИМХО драйвер Оракла в PB переводит все строки в ту кодировку, что указана в NLS_LANG клиента и здесь никаких проблем не должно быть при любой кодировке в NLS_LANG (в крайнем случае появятся "?" если преобразование невозможно, но обрезать не должно).
Т.е. проблема возникает раньше, до передачи строки в драйвер.
25 сен 07, 16:24    [4712867]     Ответить | Цитировать Сообщить модератору
 Re: PB10. Ошибки внутри программы при передаче строковых переменных в SQL  [new]
Riska
Member

Откуда: Израиль
Сообщений: 989
Похоже на это:
[url=http://]www.sql.ru/forum/actualthread.aspx?tid=321178&hl=riska#2950501[/url]
25 сен 07, 16:53    [4713091]     Ответить | Цитировать Сообщить модератору
 Re: PB10. Ошибки внутри программы при передаче строковых переменных в SQL  [new]
web_fox
Member

Откуда: Киев
Сообщений: 444
Извиняюсь, что долго не отвечал.

Так вот, сколько не мучался всего не перебирал. Ничего не помогало.
dbparm=NLS_Charset="Local",STRbyCharset=1 тоже не помогает.

БД стоит: 9.2
Клиент: 9.2
NLS_LANG AMERICAN_AMERICA.CL8MSWIN1251
PB библиотека: O84 Oracle8/8i

Всё заработало, только когда включил параметр dbparm=DisableUnicode=1

С библиотекой O90 Oracle9i (9.0.1) правильной работы добиться вообще не удалось. Да и клиентский трейсер показывает её работу почти без информации.
26 сен 07, 13:26    [4717531]     Ответить | Цитировать Сообщить модератору
 Re: PB10. Ошибки внутри программы при передаче строковых переменных в SQL  [new]
web_fox
Member

Откуда: Киев
Сообщений: 444
PaulJB
>> Такой эффект наблюдается когда уникодную строку передают в C ф-ю, ожидающую ANSI строку
Именно.
При миграции ПБ сам добавляет ANSI-определения в внешним ф-циям.
Но только при миграции. При экпорте нет. Надо вручную прописывать.


Селекты делаются прямо из PB-программы
26 сен 07, 13:29    [4717577]     Ответить | Цитировать Сообщить модератору
 Re: PB10. Ошибки внутри программы при передаче строковых переменных в SQL  [new]
ЗоринАндрей
Member

Откуда: Санкт-Петербург
Сообщений: 3004

Using the O90 or O10 database interface, PowerBuilder can connect, save, and
retrieve data in both ANSI/DBCS and Unicode databases, but it does not
convert data between Unicode and ANSI/DBCS. When character data or
command text is sent to the database, PowerBuilder sends a Unicode string.
The driver must guarantee that the data is saved as Unicode data correctly.
When PowerBuilder retrieves character data, it assumes the data is Unicode.

Using the O84 database interface, PowerBuilder detects whether the Oracle
client variable NLS_LANG is set. If the variable is set to a value that requires
UTF-8 or DBCS characters, PowerBuilder converts command text (such as
SELECT * FROM emp) to the appropriate character set before sending the
command to the database. However, if DisableBind is set to 0 (the default),
PowerBuilder always binds string data as Unicode data. Using O84, you can
set the DisableUnicode database parameter to 1 to retrieve data as an ANSI
string.
26 сен 07, 13:37    [4717648]     Ответить | Цитировать Сообщить модератору
 Re: PB10. Ошибки внутри программы при передаче строковых переменных в SQL  [new]
web_fox
Member

Откуда: Киев
Сообщений: 444
ЗоринАндрей

Using the O90 or O10 database interface,...
string.


Спасибо, Андрей.
26 сен 07, 13:42    [4717702]     Ответить | Цитировать Сообщить модератору
 Re: PB10. Ошибки внутри программы при передаче строковых переменных в SQL  [new]
web_fox
Member

Откуда: Киев
Сообщений: 444
А как тогда добиться работы программы с O90? Самому конвертировать в Unicode?
26 сен 07, 13:43    [4717725]     Ответить | Цитировать Сообщить модератору
 Re: PB10. Ошибки внутри программы при передаче строковых переменных в SQL  [new]
ЗоринАндрей
Member

Откуда: Санкт-Петербург
Сообщений: 3004
Кстати я так и не увидел какая именно версия десятки используется.

Вот из 10.2 например новый параметр в DBParm
NCharBind database parameter for Oracle
The NCharBind database parameter for Oracle9i and Oracle 10g improves
performance by allowing you to specify whether string variables should be
treated as Char or NChar datatypes. The default is to treat string variables as
Char datatypes. You can set this parameter on the Transaction tab page in the
Database Profile Setup dialog box for Oracle9i and Oracle 10g. For more
information, see NCharBind in the online Help.
26 сен 07, 13:57    [4717873]     Ответить | Цитировать Сообщить модератору
 Re: PB10. Ошибки внутри программы при передаче строковых переменных в SQL  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6610
web_fox
А как тогда добиться работы программы с O90? Самому конвертировать в Unicode?

У меня O90 работает без проблем. DBParm - пустой.
PB10.0, 10.2.1
Oracle client 9.2.0.1, server 9.2.0.4
NLS_LANG=RUSSIAN_GERMANY.CL8MSWIN1251

Вот код:
SQLCA.DBMS = "O90"
SQLCA.DBParm = ""

Connect Using sqlca;

String ls_curr = "ГРН"
String ls_res

/*
  create table r_currency (rus_name varchar(40)); 
  insert into r_currency values ('ГРН');
*/

Select rus_name Into :ls_res
  From r_currency 
 where rus_name = :ls_curr;
 
 MessageBox("", ls_res) //выводит ГРН

Приведите минимальный пример, на котором наблюдается ошибка.
26 сен 07, 14:46    [4718313]     Ответить | Цитировать Сообщить модератору
 Re: PB10. Ошибки внутри программы при передаче строковых переменных в SQL  [new]
web_fox
Member

Откуда: Киев
Сообщений: 444
ЗоринАндрей
Кстати я так и не увидел какая именно версия десятки используется.

Вот из 10.2 например новый параметр в DBParm
NCharBind database parameter for Oracle
The NCharBind database parameter for Oracle9i and Oracle 10g improves
performance by allowing you to specify whether string variables should be
treated as Char or NChar datatypes. The default is to treat string variables as
Char datatypes. You can set this parameter on the Transaction tab page in the
Database Profile Setup dialog box for Oracle9i and Oracle 10g. For more
information, see NCharBind in the online Help.


Версия 10.5
26 сен 07, 17:53    [4719927]     Ответить | Цитировать Сообщить модератору
 Re: PB10. Ошибки внутри программы при передаче строковых переменных в SQL  [new]
web_fox
Member

Откуда: Киев
Сообщений: 444
Anatoly Moskovsky
Приведите минимальный пример, на котором наблюдается ошибка.


Извините, локализовать пока не могу.
На этом результате я остановлюсь, т.к. работы на 8 библиотеке достаточно.
Спасибо за помощь и, надеюсь, эта ошибка дала какой-то опыт участникам форума.
26 сен 07, 17:55    [4719950]     Ответить | Цитировать Сообщить модератору
Все форумы / PowerBuilder Ответить