powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / PB10. Ошибки внутри программы при передаче строковых переменных в SQL
17 сообщений из 17, страница 1 из 1
PB10. Ошибки внутри программы при передаче строковых переменных в SQL
    #34824036
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программа была на PB6. перенесли на PB10 и проблема.
Запускаю свою программу и вижу всередине такие проблемы, что передаётся ТОЛЬКО ПЕРВАЯ буква АНГЛИЙСКИХ строк и везде в итоге получается ошибка "no data found". На скриншоте видно, что вместо строки 'vattest' в запрос биндится буква 'v'.

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

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

Вопрос: почему передаётся только первая буква вместо всей строки?
...
Рейтинг: 0 / 0
PB10. Ошибки внутри программы при передаче строковых переменных в SQL
    #34824126
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
web_fox wrote:

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

Похоже на последствия перехода от ANSI к Unicode. Но я не припомню,
чтобы у кого-то ещё была такая проблема...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
PB10. Ошибки внутри программы при передаче строковых переменных в SQL
    #34824287
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. А что момжно попробовать исправить, чтобы делу помочь?
...
Рейтинг: 0 / 0
PB10. Ошибки внутри программы при передаче строковых переменных в SQL
    #34824697
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
web_foxСпасибо. А что можно попробовать исправить, чтобы делу помочь?
Прежде чем попасть в запрос, строка случайно не обрабатывается в какой-то внешней DLL?
Такой эффект наблюдается когда уникодную строку передают в C ф-ю, ожидающую ANSI строку
...
Рейтинг: 0 / 0
PB10. Ошибки внутри программы при передаче строковых переменных в SQL
    #34824869
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> Такой эффект наблюдается когда уникодную строку передают в C ф-ю, ожидающую ANSI строку
Именно.
При миграции ПБ сам добавляет ANSI-определения в внешним ф-циям.
Но только при миграции. При экпорте нет. Надо вручную прописывать.
...
Рейтинг: 0 / 0
PB10. Ошибки внутри программы при передаче строковых переменных в SQL
    #34825001
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в базе кодировка какая? ANSI?
какой NLS_LANG на клиенте?
...
Рейтинг: 0 / 0
PB10. Ошибки внутри программы при передаче строковых переменных в SQL
    #34825168
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗоринАндрейкакой NLS_LANG на клиенте?
ИМХО драйвер Оракла в PB переводит все строки в ту кодировку, что указана в NLS_LANG клиента и здесь никаких проблем не должно быть при любой кодировке в NLS_LANG (в крайнем случае появятся "?" если преобразование невозможно, но обрезать не должно).
Т.е. проблема возникает раньше, до передачи строки в драйвер.
...
Рейтинг: 0 / 0
PB10. Ошибки внутри программы при передаче строковых переменных в SQL
    #34825288
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже на это:
http://]www.sql.ru/forum/actualthread.aspx?tid=321178&hl=riska#2950501
...
Рейтинг: 0 / 0
PB10. Ошибки внутри программы при передаче строковых переменных в SQL
    #34827645
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь, что долго не отвечал.

Так вот, сколько не мучался всего не перебирал. Ничего не помогало.
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) правильной работы добиться вообще не удалось. Да и клиентский трейсер показывает её работу почти без информации.
...
Рейтинг: 0 / 0
PB10. Ошибки внутри программы при передаче строковых переменных в SQL
    #34827672
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulJB>> Такой эффект наблюдается когда уникодную строку передают в C ф-ю, ожидающую ANSI строку
Именно.
При миграции ПБ сам добавляет ANSI-определения в внешним ф-циям.
Но только при миграции. При экпорте нет. Надо вручную прописывать.

Селекты делаются прямо из PB-программы
...
Рейтинг: 0 / 0
PB10. Ошибки внутри программы при передаче строковых переменных в SQL
    #34827707
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
PB10. Ошибки внутри программы при передаче строковых переменных в SQL
    #34827733
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗоринАндрей
Using the O90 or O10 database interface,...
string.

Спасибо, Андрей.
...
Рейтинг: 0 / 0
PB10. Ошибки внутри программы при передаче строковых переменных в SQL
    #34827742
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как тогда добиться работы программы с O90? Самому конвертировать в Unicode?
...
Рейтинг: 0 / 0
PB10. Ошибки внутри программы при передаче строковых переменных в SQL
    #34827811
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати я так и не увидел какая именно версия десятки используется.

Вот из 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.
...
Рейтинг: 0 / 0
PB10. Ошибки внутри программы при передаче строковых переменных в SQL
    #34828038
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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

Вот код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
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) //выводит ГРН

Приведите минимальный пример, на котором наблюдается ошибка.
...
Рейтинг: 0 / 0
PB10. Ошибки внутри программы при передаче строковых переменных в SQL
    #34829024
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗоринАндрейКстати я так и не увидел какая именно версия десятки используется.

Вот из 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
...
Рейтинг: 0 / 0
PB10. Ошибки внутри программы при передаче строковых переменных в SQL
    #34829037
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyПриведите минимальный пример, на котором наблюдается ошибка.

Извините, локализовать пока не могу.
На этом результате я остановлюсь, т.к. работы на 8 библиотеке достаточно.
Спасибо за помощь и, надеюсь, эта ошибка дала какой-то опыт участникам форума.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / PB10. Ошибки внутри программы при передаче строковых переменных в SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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