OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 18:12

Часовой пояс: UTC + 3 часа




Форум закрыт Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 3 ] 
Автор Сообщение
СообщениеДобавлено: Вторник, 22 Июнь, 2010 17:07 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Используемая SQLGetData Function требует размера буфера-приёмника в байтах. Возвращает размер тоже в байтах (если я верно понял, явно не написано).

В процедурах чтения строк при переходе с SHORTCHAR забыли домножиться на SIZE(CHAR).
(t: Table) ReadString
(t: Table) ReadVarString

Было бы неплохо, если у кого-нибудть нашлось время независимо обмозговать/проверить сабж. С "API"-функциями облажаться немудрено...

Исправления в исходнике зелёным
Код:
StdCoder.Decode ..,, ..5t....3QwdONl9RhOO9vRbf9b8R7fJHPNGomCrlAyIhgs,CbKBhZ
 xi2,CoruKu4qouqm8rtuGfa4.hOO9vRb1Y66wb8RTfQ9vQRtIdvPZHWKqtCa.E.U5UIj,6.5Qw
 dONlnayKmKKqCLLCJuGqayKm6F9vQ5nsH3.bnayKmKa2,Cor.kay4.qorGqmQCU2,CJuyKtQC9
 8P9PP7ONbXmb.2.go9k5kCj.,6.,.vQ.cU.ktAcoZimBhWhiohgnZcZRC.,.D,0.p.0.4.0EJY
 jyC.6.VQ.EK4.1cUZj0E.69,U.UO.,Uz1,c8.2UEW.cOktE,8Mtf.2.02,.e,2.VZ.2.e0.,6Y
 UAU.Q2AUi.50q22K0k,8Mtf.2.412.e,2.AU.Ue.4.072Uj.541sH6,3gwJ.0..I16.wT2U.I3
 .2G6.R01M5krE,m.0kFk.u00EB5.3M8Es7.3.0E,0.3M.2.l.3c16.L016R6.X,zT0VeITuE98
 FfeI986F7Rp76dOM39P9P8,dI9PM7vIdfQHfPD96FdQTvRN765vPNPRPfPp76HeHdOFDOFZuC,
 tHf8J,tQdfQp761eIZOEn86TeF,tEFOEZO8rN1HM0hOEZ86ZPNb99,7P9fPp76.gV7Ic3xc7pd
 BAV7AcHRe3JeI3ZmxB,dDv76V79,dAVN8r761uIbOF.mHEGLL8rrSrtmGE8nMamRqk2A6UXxhg
 VUobx22cAHtC,NE..mHEGbXxhghCCLK0GNCnIin4a..df9b9RP9R,t6,7AN76GnIin4aUHhgo3
 ejRicYig2YmxhrZ3.N76ZPNbP8rN1Ad43YmhA,ND,7A,7JFOFRO1Hk2morSKLCIo4KtWGFWGFa
 mR0GayqnumYuKuWGtyadQbUY7Q6EK8mIi1MGsMT1amR00Q6kI8mIin4M0Ee4KliHEmorMG6H9e
 HFtQdfQHN8rN1sEFPN5vOFtJHfPbOQNf9bOINuF99R7OMdPMF7RRtQ69,tIFuHZ8JFtMUUQZUA
 adYZUwedpB.zuEzuJ58G1eINN1HM0HM0.kdapdGpWqIL4IW8JICLu69,7H9eHUUIZUQe7Jf33Z
 13d,N8N76NPNaGKqk2aU7cHH8HN76df9b1IiZN8UAVI,kYEqKKrQ5Ee.MGcQ9vQ.HWcYhZ76v7
 6VN8,tHZ86F7PULBhi,EbKJamojGoUGpUaGEGJYKYUQioJiUIbx2YWIYUgcCZcBAV7sCNuPDf9
 d0U7VA,YYdAZv2YAVI,kdGLta4Fd6Dd6,t8,tQdfQ,t8,d6Dd6HtCUAphBAV7gcCZcvgV7AVop
 Zmhgn3YugbUIiZRiBAV3p7,dI9PM.in4qk20Jdy2...1Hf4KtCJuAB00Y3.p,.,,ERQelZh2Ji
 dpiZJintIdnoM8rN1o8Ug.p,.CLR0mU83IapwaUwd432sCH68J76T9N796BvPZ965vPZfQ9vMd
 965vPRfR9fQbPOTfP,tPB963PORPMZPS,7N19R196JN8PM03OF.10cQ2Yy.24..m185m0X,A6U
 X,0GT.8142.UwUX,C5C1.Eukq22Uo.Cpm.krY3YBY3M8kYcQ2YxEEUBk2m2C268Q5N0H0ZvPa0
 kV.N,U7VXxBM8.50AZW.aEIeGEmorSaI,HeF,tQdHECGEuoYmIEGJY66NuPA7Y7UdAZUgcARe3
 3YAxhbtIABWWCBdAJYd2Y3pd2RbUIZdg,HM0N0d0m2a2.HN8rN1sE..sF.F,69C3.66LlM..wf
 1,Y3M0.kda3.AZg2YA,0GJ00.a0M8N,aUC,QCEtKad.m2G3.H0N1r,Y8.a28rm.A7EECGEuqrG
 okGrk0GeW2P.HMG23220nI..j0.u2..k2A7C5,ND,dHH8HUUod3xecQioJig2YlAZUgcCl2WGJ
 AggZhjxiUIiZRgtRggBhixgUwha3Ynlo663PS,NP1vOHfPD96VPMZPMPPNdPNZ96196hOEZ861
 vN1PORvD,d8H,aUnZimpfUIbxc6qk2aU7gcARe7pcUYhZpBw8.kbyJeyIe4Ia0Gek4k223WqrS
 LEGrr0moqKs8rrOrm0Go4KrGKqaKrSaj,kt0mvaKuWKEKLrGqmOqouqmGKEmqmwgo3hz2YeA3M
 0a2FtQdfQ,VClI0mbEaK2GbSBZUYbUY7M8H76d0,,EKYd3,g6g,A,b1,,b97PM0Hk2K29O1HM0
 aU,,ojDZc23ZghAH79,NAV7AHtC,7P9fP,dCYhZpB7OGh86ZtCPM0Hk2A7UU...dHja0m4i00G
 e..NFqK4U3,M0a2N1xVAhcClI0GeW2P.HUnVUUntCPM0A,C2..S2EI.sIUX,.N,.wf1,Y3M0.Q
 8.Euofds8,78NOFUh2YlAZUIZU.UdEImoWEuUh2YcYd3VdUlM8,d8..m4HVCBdAZ3.ICa0M0K2
 U7ktEE.P.HkWuYBU7g6U7Q56J.A7dHaUo77H,Ee.sIABWWb66QC0mJI2a0Ea.98H.H6HsIABcP
 T967PMdHFamR00Y7kWu2g6i1G5CbuEtM1EE..Qb0CyIhACoruKu8rrmKqKKtCLL6N58RZ9P7ON
 bvM,Mwd0.UiQcjpho,YcZRiX3.5011o3cQ...sQR,.G20EtV.UIU.U76.0E..k.8ssHpmcIf9P
 9fQbf9bWGhigFWE.4Te.sQRdIf9P9HWE.8z,E.0.L3D.5J.2U.sU.ktumdsIdPSNPN7ONbH.4D
 .o3aLq.,cwF.,.E2EhU.E,NN.oZ,ZC.G20U2U...G00k.0.0.0mFf3,E.4vl5UTyB4.4.0E.cU
 Zj0E..UO.,.1.eWM2y,.,6Y1.0..QB,...
 --- end of encoding ---


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 22 Июнь, 2010 17:27 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Такая поправка для (t: Table) ReadCurrency
Цитата:
Check(WinSql.SQLGetData(t.stmt, SHORT(column + 1), WinSql.SQL_C_WCHAR,
SYSTEM.ADR(str), LEN(str)*SIZE(CHAR), len), NIL, t.stmt, res);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Нашёл ошибку в драйвере SqlODBC3
СообщениеДобавлено: Понедельник, 09 Август, 2010 21:35 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Метод таблицы (t: Table) ReadString вызывается, если надо прочесть значение поля типа Char (строка фиксированной длины). При этом, неверно определяется длина строки, которую надо указать в байтах, а вместо этого передаётся кол-во символов. Поскольку уникод, то длина байтового массива получается урезанной вдвое.

Умножил LEN(str) на 2 и строки стали читаться правильно, с точностью до символа.

Вот правленный код:
Код:
   PROCEDURE (t: Table) ReadString (row, column: INTEGER; OUT str: ARRAY OF CHAR);
...
         Check(WinSql.SQLGetData(t.stmt, SHORT(column + 1), WinSql.SQL_C_WCHAR,
                                          SYSTEM.ADR(str), LEN(str)*2, len),

...               NIL, t.stmt, res);


P.S. И, конечно, лучше умножать не на 2, а на SIZE(CHAR). При этом, конечно, учитывается допущение, что размер CHAR соответствует коэффициенту SQL_C_WCHAR.

(модератор) прикреплено к существующей теме


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Форум закрыт Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB