![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Глюк в IBSQL [D7, IB6.x]
Zn © (2004-04-02 15:01:00)Ув. мастера! Подскажите! С помощью IBSQL вставляю в таблицу строку (INSERT INTO TABLE1 VALUES(...)).
На некоторых символьных полях выдаёт сообщение, что в строке обнаружен символ EOF.
Запускаю тот же INSERT в IBExpert - работает.
В чём прикол?
Zn (2004-04-06 13:13:00) [1]
> Zacho © (06.04.04 12:31) [19]
Я выслал на E-mail исходники и БД.
Буду благодарен за помощь!
("Размеры моей благодарности не будут иметь границ в пределах разумного" (С. Альтов)).
Zacho (2004-04-06 12:31:00) [2]
> Zn (06.04.04 12:20) [18]
И что ? Мало ли что есть в IB Expert, IB Manager, IBConsole ... и т.п. Собственно к IB это почти не относится.
В общем, наконец-то нормальмо и полностью опиши свою проблему - тогда есть большая вероятность на получение полезного ответа.
Кстати, думаю не помешает прочитать http://www.ibase.ru/devinfo/ibrusfaq.htm
Zn (2004-04-06 12:20:00) [3]
> Font Characters Set - это где ? Нету в IB такого, и быть
> не может.
В IBExpert в Database Registration Info (DataBase Propeties).
Zacho (2004-04-06 12:08:00) [4]Нифига не понял.. Какое отношение dbf имеет к IB ???
Font Characters Set - это где ? Нету в IB такого, и быть не может.
> заносит решётки.
Кто ? Куда ?
"Заносит" или всё-таки "отображает" в чём-то ? Разные вещи вообще-то, очень разные.
Zn (2004-04-06 11:46:00) [5]
> Zacho © (05.04.04 21:56) [15]
Спасибо за предложение, но я уже кое до чего докопался.
В общем, всё дело в кодировке. У меня DBF в кодировке 866, БД InterBase: CharSet - WIN1251, Font Characters Set - RUSSIAN_CHARSET. При такой раскладке - выдаёт ошибку, если поле DBF-файла содержит символы кириллицы. Напомню, что если этот запрос выполнять в IBExpert или IBConsole, то всё работает.
Делал в InterBase комбинации Font Characters Set - ANSI_CHARSET, OEM_CHARSET, CharSet - WIN1251 - ошибки не выдаёт, но вместо русских букв заносит решётки.
Подскажите, чего ему не хватает?
Zacho (2004-04-05 21:56:00) [6]
> Zn (05.04.04 19:16) [14]
Мне сейчас всё равно делать нехрен. Если хочешь - вышли мне gbk своей базы и примеры запросов.
Zn (2004-04-05 19:16:00) [7]
> sniknik © (05.04.04 19:05) [13]
Это я убрал. У меня прямо работает с IBSQL.SQL.
> уверен что там нормальный запрос получается?
Нормальный, потому что затыкается только на определённой таблице. Ошибка "Cannot transliterate character between character set" - именно на полях с украинскими буквами. А может на апострофы или кавычки - сейчас попробую.
sniknik (2004-04-05 19:05:00) [8]тебе же сказали почему - [7] [8], скорее всего
(для приличия хотябы
IBQuery1.SQL.Assign(ibRow);
сделал, или
IBQuery1.SQL.Text:= ibRow.Text;)
хотя может и это не поможет, уверен что там нормальный запрос получается? без кавычек в строках или пустышек в числах? делаеш то на основании данных другого запроса (данные то юзерские?).
Соловьев (2004-04-05 18:58:00) [9]Не работал с Delphi 7 - у меня 6. Но я ставил update Попробуй - http://www.ibase.ru/v6/ibx708del.zip
Соловьев (2004-04-05 18:51:00) [10]у меня украинская БД - никаких проблем не было
Zn (2004-04-05 18:49:00) [11]
> Zacho © (02.04.04 15:54) [9]
Извините, что долго не отвечал. Попробовал параметризированный запрос - всё тоже. Но закралось подозрение, что вываливает на украинские буквы - Ї, Є. У кого-то были такие проблеммы?
Zacho (2004-04-02 15:54:00) [12]2 Zn:
Не майся дурью с динамическим формированием запроса, а сделай параметризированный запрос. Наверняка проблема сразу исчезнет
Johnmen (2004-04-02 15:52:00) [13]>IBSQL1.SQL:=ibRow;
???
Соловьев (2004-04-02 15:49:00) [14]
> IBSQL1.SQL:=ibRow;
а как это?
Zn (2004-04-02 15:46:00) [15]Код такой:
while not VKDBFNTX1.Eof do
begin
ibRow.Clear;
ibRow.Add('INSERT INTO SPLAT VALUES(');
for i:=0 to VKDBFNTX1.FieldCount-1 do
if VKDBFNTX1.Fields[i].IsNull then ibRow.Add('NULL,')
else
case VKDBFNTX1.DBFFieldDefs[i].field_type of
'N','F': ibRow.Add(VKDBFNTX1.Fields[i].AsString+',');
'C','D','M': ibRow.Add(''''+VKDBFNTX1.Fields[i].AsString+''''+',');
'L':
if VKDBFNTX1.Fields[i].AsBoolean then
ibRow.Add(''''+'T'+''''+',')
else
ibRow.Add(''''+'F'+''''+',');
end;
ibRow[ibRow.Count-1]:=LeftStr(ibRow[ibRow.Count-1],Length(ibRow[ibRow.Count-1])-1)+')';
IBSQL1.SQL.Clear;
IBSQL1.SQL:=ibRow;
IBSQL1.Prepare;
IBSQL1.ExecQuery;
VKDBFNTX1.Next;
end;
VKDBFNTX1 - это аналг TTable (доступ к dbf без BDE).
Что интересно, на некоторых таблицах работает, на некоторых - нет.
Johnmen (2004-04-02 15:30:00) [16]>Zn
>Что может быть?
М.б. неправильный синтаксис...
Приводи код.
Zn (2004-04-02 15:24:00) [17]Что может быть? В отледчике дохожу до IBSQL.ExecQuery, беру строки из IBSQL.SQL, сформированные динамически, и вставляю в IBExpert или IBConsole, и там этот запрос работает.
sniknik (2004-04-02 15:16:00) [18]потому что там у тебя этого "..." не было. было чтото другое
Zn (2004-04-02 15:12:00) [19]
> Johnmen © (02.04.04 15:06) [1]
> ... - всё дело в этом
Ясно, что в этом. Почему в IBExpert работает без вопросов?
Johnmen (2004-04-02 15:06:00) [20]... - всё дело в этом