Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / PB10. Ошибки внутри программы при передаче строковых переменных в SQL / 17 сообщений из 17, страница 1 из 1
25.09.2007, 12:42
    #34824036
web_fox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PB10. Ошибки внутри программы при передаче строковых переменных в SQL
Программа была на 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
25.09.2007, 12:56
    #34824126
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PB10. Ошибки внутри программы при передаче строковых переменных в SQL
web_fox wrote:

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

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

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

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

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

Вот из 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
26.09.2007, 14:46
    #34828038
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PB10. Ошибки внутри программы при передаче строковых переменных в SQL
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
26.09.2007, 17:53
    #34829024
web_fox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PB10. Ошибки внутри программы при передаче строковых переменных в SQL
ЗоринАндрейКстати я так и не увидел какая именно версия десятки используется.

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

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


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