On-line: Haz, гостей 1. Всего: 2 [подробнее..]
АвторСообщение
администратор




Пост N: 5409
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.12.15 16:56. Заголовок: [?] ADS + SQL + база в OEM


Подключаюсь к словарю через adsConnect60
Открываю базу через USE
 
use klient new
? ADSGETTABLECHARTYPE() // вернуло ADS_OEM , так и надо
wait
browse() // тут все красиво
close klient

Далее создаю и выполняю SQL запрос
 
Запрос таков
cSQL:="select * from klient"
? ADSGETTABLECHARTYPE() // вернуло ADS_OEM , так и надо
wait
browse() // тут все красиво

Усложняю запрос
 
cSQL:="select TOP 10 * from klient"
? ADSGETTABLECHARTYPE() // вернуло ADS_ANSI , а должно быть ADS_OEM
wait
browse() // тут крякозяблы

Как решить задачу красиво и без костылей ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 12 [только новые]


постоянный участник


Пост N: 501
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 16.12.15 19:51. Заголовок: Усложняю запрос c..



 цитата:
Усложняю запрос
cSQL:="select TOP 10 * from klient"


Видно что-то осталось за кадром. От того, что ограничили
выборку, кодовая страница не должна измениться.
Предложение TOP используется совместно с предложением ORDER BY,
иначе выборка происходит фактически случайных записей.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5410
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.12.15 20:43. Заголовок: Vlad04 пишет: Предл..


Vlad04 пишет:

 цитата:
Предложение TOP используется совместно с предложением ORDER BY,
иначе выборка происходит фактически случайных записей.


Добавил ORDER BY , но проблема осталась.

Изменил так
cSQL:="select * from klient where kod_kl=5"
Проблема осталась.

PS
В общем когда выборка , то получаем крякозяблы.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 726
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 16.12.15 22:37. Заголовок: Vlad04 пишет: Видно..


Vlad04 пишет:

 цитата:
Видно что-то осталось за кадром. От того, что ограничили
выборку, кодовая страница не должна измениться.


за кардом осталось только что база CDX и версия ADS. В остальном - подтверждаю то что Дима говорит, чуть изменили запрос и CharSet слетает.
Сам видел (подключался по AIS ) , как исправить пока не знаю.
Есть кривой костыль в виде условного блока выборки-записи бровса через AnsiToOem ... но это же бред.
Advantage Architect - все запросы показывает верно, а из консольного теста вот такая бяка.
Дима
скинь короткий самодостаточный, базу можно нагенерить с строками случайными, а я завтра на adslocal проверю.

PS У меня самого везде таблицы ADT и ANSI , на такой глюк в этой комбинации не натыкался


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5411
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.12.15 23:44. Заголовок: Haz пишет: Дима ски..


Haz пишет:

 цитата:
Дима
скинь короткий самодостаточный, базу можно нагенерить с строками случайными, а я завтра на adslocal проверю.


Хорошо , завтра придумаю и выложу.
Спасибо Игорь !

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5412
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.12.15 10:25. Заголовок: Примерчик (prg в 866..


Примерчик (prg в 866 кодировке)

Скрытый текст



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5413
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.12.15 11:39. Заголовок: вот такое выражение ..


вот такое выражение тоже глючит
 
cSQL:="select * from test WHERE naim LIKE '%р%'"


а такое нет
 
cSQL:="select * from test where cod in (2,7,10)"



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 504
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 17.12.15 20:18. Заголовок: У меня все нормально..


У меня все нормально. Правда я использую хХарбоур 1 и ADS 9.
В заголовке файла я изменил определения:

 цитата:

//
// HB_LANGSELECT("RU866")
// hb_cdpSelect( "RU866" )
//
// rddSetDefault( "ADSCDX" )
// AdsSetCharType(2,.t.)

REQUEST ADS ; rddRegister("ADS", 1 )
rddsetdefault("ADS" ); SET SERVER LOCAL
AdsSetFileType(ADS_CDX)
//ОЕМ
AdsSetCharType( 1, .T. )



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 509
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 17.12.15 20:34. Заголовок: У меня все нормально..


У меня все нормально. Правда я использую хХарбоур 1 и ADS 9.
В заголовке файла я изменил определения:

 цитата:

// HB_LANGSELECT("RU866")
// hb_cdpSelect( "RU866" )
// rddSetDefault( "ADSCDX" )
// AdsSetCharType(2,.t.)


Чем заменил, не могу ввести Сайт форума ругается


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 510
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 17.12.15 20:34. Заголовок: У меня все нормально..


У меня все нормально. Правда я использую хХарбоур 1 и ADS 9.
В заголовке файла я изменил определения:
Чем заменил, не могу ввести Сайт форума ругается


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 511
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 17.12.15 20:36. Заголовок: Вот это я на вводил...


Вот это я на вводил. Каждая попытка, завершалась ошибкой !!

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 729
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 17.12.15 20:54. Заголовок: Vlad04 пишет: //ОЕМ..


Vlad04 пишет:

 цитата:
//ОЕМ
AdsSetCharType( 1, .T. )



OEM = 2
из ADS.CH
#command SET CHARTYPE TO <x:ANSI,OEM> ;
=> AdsSetCharType( if( upper( <(x)> ) == "OEM", 2, 1 ) )

из справки по ADS
ADS_ANSI=1 ADS_OEM=2

а разгадка оказалась в твоей ошибке
Дима позже отпишет


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5414
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.12.15 22:30. Заголовок: Vlad04 пишет: Вот э..


Vlad04 пишет:

 цитата:
Вот это я на вводил. Каждая попытка, завершалась ошибкой !!


Почищу , бывает..... косяки форума.

Haz пишет:

 цитата:
а разгадка оказалась в твоей ошибке


Так и есть.
Если кратко.
База в OEM И если перед созданием словаря задать установку AdsSetCharType(ADS_OEM,.T.)
то на ряде (не всех) выборок SQL будут каляки-маляки (глюки с кодировкой).
Причину выяснить не удалось и скорее всего это глюк ADS.
Ежели перед созданием словаря задать AdsSetCharType(ADS_ANSI) или ни чего не задавать
а по умолчанию ADS_ANSI то все будет пучком.
Это конечно как бы парадокс добавлять в словарь базу (ADSDDADDTABLE) которая в OEM c флагом ADS_ANSI ,
но работает , во всяком случае на проведенных тестах кодировка не слетает.
Ну и далее как обычно ставим AdsSetCharType(ADS_OEM,.T.) если базы реально в OEM.
Фокус-покус конечно , но работает.
По большому счету надо бы базы конвертнуть в ANSI , так как на OEM кодировку разработчик мне
кажется забил.

PS
А форум сегодня реально глючит........некая антиспам защита срабатывает ))

Warning: preg_match() [function.preg-match]: Compilation failed: invalid UTF-8 string at offset 1 in /www/borda.ru/www/antispam.php on line 22

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 100
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет