Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

Глюк в IBSQL   Найти похожие ветки 

 
Zn   (2004-04-02 15:01) [0]

Ув. мастера! Подскажите! С помощью IBSQL вставляю в таблицу строку (INSERT INTO TABLE1 VALUES(...)).
На некоторых символьных полях выдаёт сообщение, что в строке обнаружен символ EOF.
Запускаю тот же INSERT в IBExpert - работает.
В чём прикол?


 
Johnmen ©   (2004-04-02 15:06) [1]

... - всё дело в этом


 
Zn   (2004-04-02 15:12) [2]


> Johnmen ©   (02.04.04 15:06) [1]
> ... - всё дело в этом

Ясно, что в этом. Почему в IBExpert работает без вопросов?


 
sniknik ©   (2004-04-02 15:16) [3]

потому что там у тебя этого "..." не было. было чтото другое


 
Zn   (2004-04-02 15:24) [4]

Что может быть? В отледчике дохожу до IBSQL.ExecQuery, беру строки из IBSQL.SQL, сформированные динамически, и вставляю в IBExpert или IBConsole, и там этот запрос работает.


 
Johnmen ©   (2004-04-02 15:30) [5]

>Zn  
>Что может быть?

М.б. неправильный синтаксис...
Приводи код.


 
Zn   (2004-04-02 15:46) [6]

Код такой:
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).
Что интересно, на некоторых таблицах работает, на некоторых - нет.


 
Соловьев ©   (2004-04-02 15:49) [7]


> IBSQL1.SQL:=ibRow;

а как это?


 
Johnmen ©   (2004-04-02 15:52) [8]

>IBSQL1.SQL:=ibRow;

???


 
Zacho ©   (2004-04-02 15:54) [9]

2 Zn:
Не майся дурью с динамическим формированием запроса, а сделай параметризированный запрос. Наверняка проблема сразу исчезнет


 
Zn   (2004-04-05 18:49) [10]


> Zacho ©   (02.04.04 15:54) [9]

Извините, что долго не отвечал. Попробовал параметризированный запрос - всё тоже. Но закралось подозрение, что вываливает на украинские буквы - Ї, Є. У кого-то были такие проблеммы?


 
Соловьев ©   (2004-04-05 18:51) [11]

у меня украинская БД - никаких проблем не было


 
Соловьев ©   (2004-04-05 18:58) [12]

Не работал с Delphi 7 - у меня 6. Но я ставил update Попробуй -http://www.ibase.ru/v6/ibx708del.zip


 
sniknik ©   (2004-04-05 19:05) [13]

тебе же сказали почему - [7] [8], скорее всего
(для приличия хотябы
IBQuery1.SQL.Assign(ibRow);
сделал, или
IBQuery1.SQL.Text:= ibRow.Text;)
хотя может и это не поможет, уверен что там нормальный запрос получается? без кавычек в строках или пустышек в числах? делаеш то на основании данных другого запроса (данные то юзерские?).


 
Zn   (2004-04-05 19:16) [14]


> sniknik ©   (05.04.04 19:05) [13]

Это я убрал. У меня прямо работает с IBSQL.SQL.

> уверен что там нормальный запрос получается?

Нормальный, потому что затыкается только на определённой таблице. Ошибка "Cannot transliterate character between character set" - именно на полях с украинскими буквами. А может на апострофы или кавычки - сейчас попробую.


 
Zacho ©   (2004-04-05 21:56) [15]


> Zn   (05.04.04 19:16) [14]

Мне сейчас всё равно делать нехрен. Если хочешь - вышли мне gbk своей базы и примеры запросов.


 
Zn   (2004-04-06 11:46) [16]


> 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-06 12:08) [17]

Нифига не понял.. Какое отношение dbf имеет к IB ???
Font Characters Set - это где ? Нету в IB такого, и быть не может.

> заносит решётки.

Кто ? Куда ?
"Заносит" или всё-таки "отображает" в чём-то ? Разные вещи вообще-то, очень разные.


 
Zn   (2004-04-06 12:20) [18]


> Font Characters Set - это где ? Нету в IB такого, и быть
> не может.

В IBExpert в Database Registration Info (DataBase Propeties).


 
Zacho ©   (2004-04-06 12:31) [19]


> Zn   (06.04.04 12:20) [18]

И что ? Мало ли что есть в IB Expert, IB Manager, IBConsole ... и т.п. Собственно к IB это почти не относится.
В общем, наконец-то нормальмо и полностью опиши свою проблему - тогда есть большая вероятность на получение полезного ответа.
Кстати, думаю не помешает прочитать http://www.ibase.ru/devinfo/ibrusfaq.htm


 
Zn   (2004-04-06 13:13) [20]


> Zacho ©   (06.04.04 12:31) [19]

Я выслал на E-mail исходники и БД.
Буду благодарен за помощь!
("Размеры моей благодарности не будут иметь границ в пределах разумного" (С. Альтов)).



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

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.027 c
3-1081178285
olhovik
2004-04-05 19:18
2004.05.02
Добавление записи в файл


6-1078413082
xm-ad
2004-03-04 18:11
2004.05.02
TWebBrowser и frames


1-1081966538
Netrix
2004-04-14 22:15
2004.05.02
Как зная путь и имя файла определить каким процессом он открыт?


1-1081772016
ss300
2004-04-12 16:13
2004.05.02
Обработка TEdit


4-1078230208
AloneAli
2004-03-02 15:23
2004.05.02
Мигание в System Tray