Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];

Вниз

Проблема с открытием pFIBDataSet по FB 1.5.1   Найти похожие ветки 

 
wipr   (2007-12-08 00:49) [0]

Если используется сервер FB 1.5.4, то все работает нормально (клиентское приложение написано на ПК, на котором установлен FB 1.5.4). Как только приложение переносится клиенту (у него клиент и сервер имеет FB 1.5.1) возникает ошибка:
frm.qu2.SelectQuery:
Arithmetic overflow or division by zero has occurred. Arithmetic exception, numeric overflow, or string truncation.
Cannot transliterate character between character sets.

Сдесь qu2 - это pFIBDataSet в качестве запроса выбора используется следующий текст:
SELECT *
FROM SANCTION
WHERE USERNAME=:USERNAME

открывается запрос с помощью:
 qu2.Close;
 qu2.ParamByName("USERNAME").AsString:=trim(listUser.Text);
 qu2.Open;
где listUser - это ComboBox
Ошибка возникает в момент qu2.Open;


 
turbouser ©   (2007-12-08 01:21) [1]


> wipr   (08.12.07 00:49)  

CHARSET надо выставить у pFDataBase тотже, что и у базы данных.


 
Виталий Панасенко(дом)   (2007-12-08 01:32) [2]

старая, как сам InteBase, проблема... хоть и не проблема... заскок.. есть украинский вариант загадки: ходыть, ходыть - не заходыть... а як зайде - не выгонеш!... видповидь:за..б в голову..:-)))


 
wipr   (2007-12-08 09:52) [3]


> CHARSET надо выставить у pFDataBase тотже, что и у базы
> данных.


В том то и дело что выставлено WIN1251


 
wipr   (2007-12-08 10:03) [4]

> CHARSET надо выставить у pFDataBase тотже, что и у базы
> данных.

В том то и дело что выставлено WIN1251
Но почему в FB 1.5.1 не работает, а FB 1.5.4 работает.


 
PEAKTOP ©   (2007-12-08 13:45) [5]

А так ?

 qu2.Close;
 qu2.ParamCheck := false;
 qu2.SQL.Text :=
   "SELECT * "+#13#10+  
   "FROM   SANCTION "+#13#10+  
   "WHERE USERNAME= """+trim(listUser.Text)+""" ";
 qu2.Open;


 
turbouser ©   (2007-12-08 14:38) [6]


> wipr   (08.12.07 10:03) [4]

БД - то одинаковая? Проверь CHARSET у той, что у себя и той, что у клиента.


 
atruhin ©   (2007-12-08 15:49) [7]

Во первых пропиши в запросе поля, * - один из главных источников ошибок.
Во вторых где метаданные SANCTION ?


 
Desdechado ©   (2007-12-08 17:46) [8]

Почитай в ReleaseNotes, может, они поменяли версию ODS для базы. Ты как переносишь ее - через backup-restore или простым копированием?
А также помни, что чарсет можно задавать не только для БД, но и для отдельных полей.
Создаешь базу ты и потом ее отдаешь или юзер ее сам делает? Если сам, то он мог просто по умолчанию для базы другой чарсет задать, чем у тебя.
Кроме того, эта ошибка может быть от Arithmetic overflow or division by zero has occurred, string truncation., т.е. у клиента размер поля другой.


 
wipr   (2007-12-08 19:22) [9]

База одна передается клиенту backup -> copy -> restore
База и поле имеют WIN1251.
Проблема в том что с FB 1.5.1 не работает, а с FB 1.5.4 работает.


 
wipr   (2007-12-08 19:25) [10]


> А так ?
>
>  qu2.Close;
>  qu2.ParamCheck := false;
>  qu2.SQL.Text :=
>    "SELECT * "+#13#10+  
>    "FROM   SANCTION "+#13#10+  
>    "WHERE USERNAME= """+trim(listUser.Text)+""" ";
>  qu2.Open;


Тоже не работает.


 
turbouser ©   (2007-12-08 19:51) [11]


> wipr   (08.12.07 19:25) [10]

Надо взять отресторенную бд у клиента и сравнить с исходной.
Все-таки даунгрейд получается и вполне возможны какие-то проблемы.
p.s.
Почему бы и клиенту не поставить 1.5.4 ?


 
Desdechado ©   (2007-12-08 19:54) [12]

SANCTION - это таблица, вьюха или процедура?
Еще раз проверь типы данных на размерность. Что-то где-то куда-то не вмещается.


 
wipr   (2007-12-08 20:25) [13]


> Надо взять отресторенную бд у клиента и сравнить с исходной.
>
> Все-таки даунгрейд получается и вполне возможны какие-то
> проблемы.

На одной и той же машине я менял сервер FB c 1.5.1 на 1.5.4 и обратно, при этом база была одна и таже.


> SANCTION - это таблица, вьюха или процедура?

Это таблица.

> Еще раз проверь типы данных на размерность. Что-то где-то
> куда-то не вмещается.

Я тоже понимаю чтот что-то, куда-то не помещается, только что и куда сам не пойму.


> Почему бы и клиенту не поставить 1.5.4

Если возникла такая проблема с мелочью в новом проекте, где вероятность того, что чтонибудь не вылезет с сучествующими (действующими) проектами.
> Во первых пропиши в запросе поля, * - один из главных источников
> ошибок.

Поля прописывал, результата нет.


> Во вторых где метаданные SANCTION ?

CREATE TABLE SANCTION
(
 KOD INTEGER DEFAULT -1 NOT NULL,
 USERNAME CHAR(50) CHARACTER SET WIN1251 DEFAULT "(new)" NOT NULL COLLATE PXW_CYRL,
 USERPASSWORD CHAR(15) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
 USERTYPE CHAR(1) CHARACTER SET WIN1251 DEFAULT 0 NOT NULL,
 DOSTUP_PROV CHAR(1) CHARACTER SET WIN1251 DEFAULT 0 NOT NULL,
 NOISPOLZ CHAR(1) CHARACTER SET WIN1251 DEFAULT 0 NOT NULL,
 VIEW1 CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW2 CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW3 CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW4 CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW5 CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW6 CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW7 CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW8 CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW9 CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW10 CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW11 CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW12 CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW13 CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW14 CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW15 CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW16 CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW17 CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW18 CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW19 CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW20 CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
PRIMARY KEY (KOD),
UNIQUE (USERNAME)
);


 
wipr   (2007-12-08 20:30) [14]

Да может быть самое главное я не сказал.
Данный код работает в старых проектах, но только с BDE/
Новый проект решил сделать с FIBPlus и тут начались непонятки.


 
turbouser ©   (2007-12-08 21:21) [15]


> wipr   (08.12.07 20:25) [13]

Зачем для каждого поля в отдельности указывать CHARACTER SET ?
Достаточно указать его для всей базы данных.
У самой БД точно WIN1251 ?


 
wipr   (2007-12-08 22:19) [16]


> У самой БД точно WIN1251 ?

Да


 
Desdechado ©   (2007-12-10 12:08) [17]

> USERTYPE CHAR(1) CHARACTER SET WIN1251 DEFAULT 0 NOT NULL,
>   DOSTUP_PROV CHAR(1) CHARACTER SET WIN1251 DEFAULT 0 NOT NULL,
Довольно странно.

И почему не используешь VARCHAR для имени/пароля?


 
wipr   (2007-12-10 21:04) [18]


> И почему не используешь VARCHAR для имени/пароля?

По моему CHAR или VARCHAR все равно должен работать.
По моему это проблемы с FIBPlus под сервером IB 1.5.1, точнее с компонентами pFIBDataSet и pFIBQuery. Ошибка причем возникает после Open, в момент получения данных от сервера, т.е. я пробовал следующий код:
pFIBQuery.GoToFirstRecordOnExecute:=False;
pFIBQuery.SQL.Text:="SELECT * FROM SANCTION WHERE USERNAME=:USERNAME";
pFIBQuery.ParamByName("USERNAME").AsString:=trim(listUser.Text);
pFIBQuery.ExecQuery;  
Сообщение об ошибке вышло тут.
pFIBQuery.Next;


 
turbouser ©   (2007-12-10 21:13) [19]


> wipr   (10.12.07 21:04) [18]

Скинь куда-нибудь тестовую бд и исходники, в которых воспроизводится данная ошибка.
например на webfile.ru
А то получается поиск черной кошки в темной комнате...


 
wipr   (2007-12-10 21:28) [20]

Тестовая БД весит 235М. Дюжа много.
скрипт следующий
set names WIN1251;
SET SQL DIALECT 1;
create database "C:\Мои документы\BASE\uchet.gdb" USER "SYSDBA" PASSWORD "masterkey" default character set WIN1251;
connect "C:\Мои документы\BASE\uchet.gdb" USER "SYSDBA" PASSWORD "masterkey";
...............
/*ТАБЛИЦА ПОЛЬЗОВАТЕЛЕЙ*/
CREATE TABLE SANCTION
(
 KOD    INTEGER DEFAULT -1 NOT NULL,
 USERNAME    CHAR(50) CHARACTER SET WIN1251 DEFAULT "(new)" NOT NULL COLLATE PXW_CYRL,
 USERPASSWORD    CHAR(15) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
 USERTYPE    CHAR(1) CHARACTER SET WIN1251 DEFAULT 0 NOT NULL,
 DOSTUP_PROV    CHAR(1) CHARACTER SET WIN1251 DEFAULT 0 NOT NULL,
 NOISPOLZ    CHAR(1) CHARACTER SET WIN1251 DEFAULT 0 NOT NULL,
 VIEW1    CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW2    CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW3    CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW4    CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW5    CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW6    CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW7    CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW8    CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW9    CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW10    CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW11    CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW12    CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW13    CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW14    CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW15    CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW16    CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW17    CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW18    CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW19    CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
 VIEW20    CHAR(1) CHARACTER SET WIN1251 DEFAULT "1" NOT NULL,
PRIMARY KEY (KOD),
UNIQUE (USERNAME)
);

procedure TfrmLogin.OKBtnClick(Sender: TObject);
var
 s: String;
 i: Integer;
begin
 qu2.Close;
 qu2.ParamByName("USERNAME").AsString:=trim(listUser.Text);
 qu2.Open;
 
 if qu2.FieldByName("USERPASSWORD").AsString<>null
   then s:=qu2.FieldByName("USERPASSWORD").AsString
   else s:="";
 qu2.Close;
 
 if Password.Text<>s then begin
   ShowMessage("Неправильный пароль.");
   Password.Text:="";
   Password.SetFocus;
 end else ModalResult:=mrOk;
end;


 
turbouser ©   (2007-12-10 22:09) [21]


> wipr   (10.12.07 21:28) [20]

Это ни о чем не говорит.

qu2.FieldByName("USERPASSWORD").AsString<>null
- это что такое?
Должно быть
if not VarIsNull(qu2.FieldByName("USERPASSWORD").Value) then
P.S.
Настаиваю на том, что pFIBDatabase.ConnectionParams.CharSet<>"WIN1251"


 
wipr   (2007-12-10 22:17) [22]


> qu2.FieldByName("USERPASSWORD").AsString<>null
> - это что такое?

согласен полная чушь, но до неё дело не доходит

> Настаиваю на том, что pFIBDatabase.ConnectionParams.CharSet<>"WIN1251"

и всётаки WIN1251 (проверено)


 
wipr   (2007-12-10 22:25) [23]


> Настаиваю на том, что pFIBDatabase.ConnectionParams.CharSet<>"WIN1251"


pFIBDatabase.DBParams
user_name=SYSDBA
password=masterkey
lc_ctype=WIN1251


 
wipr   (2007-12-10 22:41) [24]

А вот и сам pFIBDatabase
object DB: TpFIBDatabase
 DBName = "localhost:C:\Base\OKTABR\UCHET.GDB"
 DBParams.Strings = (
   "user_name=SYSDBA"
   "password=masterkey"
   "lc_ctype=WIN1251"
   "sql_role_name=")
 SQLDialect = 1
 Timeout = 0
 DesignDBOptions = []
 LibraryName = "fbclient.dll"
 WaitForRestoreConnect = 0
 Left = 25
 Top = 140
end

это pFIBDataSet
object qu2: TpFIBDataSet
 SelectSQL.Strings = (
   "SELECT *"
   "FROM SANCTION"
   "WHERE USERNAME=:USERNAME")
 Transaction = t2
 Database = frmMane.DB
 Left = 300
 Top = 80
end

а это pFIBTransaction
object t2: TpFIBTransaction
 DefaultDatabase = frmMane.DB
 TimeoutAction = TARollback
 Left = 270
 Top = 80
end


 
turbouser ©   (2007-12-10 22:45) [25]


> wipr   (10.12.07 22:41) [24]
>
> А вот и сам pFIBDatabase
> object DB: TpFIBDatabase
>  DBName = "localhost:C:\Base\OKTABR\UCHET.GDB"


> wipr   (10.12.07 21:28) [20]
>
> Тестовая БД весит 235М. Дюжа много.
> скрипт следующий
> set names WIN1251;
> SET SQL DIALECT 1;
> create database "C:\Мои документы\BASE\uchet.gdb"

Может в этом дело?


 
Desdechado ©   (2007-12-10 22:53) [26]

> wipr   (10.12.07 21:04) [18]
Ты невнимателен. Я выделил тип CHAR и DEFAULT 0, что вообще-то разных типов. Хотя к SELECT вряд ли имеет отношение, но хорошо демонстрирует твою небрежность в мелочах.


 
Sergey13 ©   (2007-12-11 09:00) [27]

> [18] wipr   (10.12.07 21:04)

> Ошибка причем возникает после Open

> pFIBQuery.ExecQuery;  
> Сообщение об ошибке вышло тут.
> pFIBQuery.Next;

А разве ExecQuery=Open?


 
turbouser ©   (2007-12-11 09:44) [28]


> Sergey13 ©   (11.12.07 09:00) [27]

У pFIBQuery Open - это свойство.


 
wipr   (2007-12-11 20:08) [29]


> >  DBName = "localhost:C:\Base\OKTABR\UCHET.GDB"


> > create database "C:\Мои документы\BASE\uchet.gdb"
>
> Может в этом дело?


Нет дело не в этом. Вытягивалось из разных скриптов. В "C:\Мои документы\BASE\uchet.gdb" лежит исходная база. А в C:\Base\OKTABR\UCHET.GDB" рабочая. Разница только в наполнении данными, структура не менялась.
Есть еще интересное с FIBPlus
SELECT * FROM SANCTION WHERE USERNAME=:USERNAME
:USERNAME="USER"
проходит без ошибки.
В IBConsole
SELECT * FROM SANCTION WHERE USERNAME="Администратор"
ошибка есть
а в dbexplor
SELECT * FROM SANCTION WHERE USERNAME="Администратор"
ошибки нет как и при использовании TQuery от BDE
Похоже действительно глючит FB 1.5.1 без BDE


 
turbouser ©   (2007-12-11 20:54) [30]


> wipr   (11.12.07 20:08) [29]

Проверял на 1.5.1.4481 - не глючит.
Где-то у тебя CHARSET все-таки не прописан.
Попробуй сделать новый проект, накидай на форму
pFibDataBase, pFibTransaction, pFibQuery - выставь
все необходимые свойства и проверь.


 
Desdechado ©   (2007-12-12 08:49) [31]

:USERNAME="USER"
проходит без ошибки.
В IBConsole
SELECT * FROM SANCTION WHERE USERNAME="Администратор"
ошибка есть

Это однозначно несовпадение чарсетов.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.04 c
15-1207136742
lead-in
2008-04-02 15:45
2008.05.18
dell


8-1179987008
NewZ
2007-05-24 10:10
2008.05.18
Формат *.wav файла. Как разрезать *.wav файл?


2-1208521330
Динис_ИС
2008-04-18 16:22
2008.05.18
Как зашарить папку ?


15-1206929508
slider007
2008-03-31 06:11
2008.05.18
С днем рождения ! 31 марта 2008 понедельник


3-1197548717
kudatsky
2007-12-13 15:25
2008.05.18
Как определить количество открытых DBF-файлов ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский