Russian Qt Forum
Май 04, 2024, 14:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не отображаются данные из файла interbase  (Прочитано 11986 раз)
BaltikS
Гость
« : Май 17, 2005, 16:50 »

Вопрос в следующем:
 делаю запрос SELECT * FROM MyTable. В результате выдаются только те строки, которые не содержат русских букв. При добавлении данных INSERTом, он добавляет, но не при выборке - не выбирает. Смотрю данные из другой проги, все "русские" данные имеются в БД.
Как быть?  :shock:
Как сделать так, чтоб данные выбирались и отображались в QT?

Спасибо!
Записан
GrolfCry
Гость
« Ответ #1 : Май 18, 2005, 06:32 »

C interbase в некомерческой версии qt у  меня тоже не работало, в комерческой почти все ок, кроме работы с блобами
Записан
BaltikS
Гость
« Ответ #2 : Май 18, 2005, 09:22 »

У меня комерческая 3.3.4, но крякнутая.....  :lol:
Записан
GrolfCry
Гость
« Ответ #3 : Май 18, 2005, 10:14 »

А с другими драйверами (postgresql, mysql) - нормально работает?
Записан
BaltikS
Гость
« Ответ #4 : Май 19, 2005, 10:11 »

С другими дровами всё как  надо. Удивительно, но когда делаю то же  через ODBC (подключаюсь к интербейсу через ODBC -ный драйвер) - тоже самое!
Записан
GrolfCry
Гость
« Ответ #5 : Май 19, 2005, 10:24 »

Мне вот в QT пришлось закинуть Firebird (interbase), а жаль оно было самое то, перешел на постгресс.
Записан
Kostya.
Гость
« Ответ #6 : Май 24, 2005, 11:48 »

Пользую уже больше полугода Qt 3.3.0 и Firebird (interbase), с русскими все нормально.
Использую api (gds32.dll)
Записан
GrolfCry
Гость
« Ответ #7 : Май 24, 2005, 12:21 »

Цитата: "Kostya."
Пользую уже больше полугода Qt 3.3.0 и Firebird (interbase), с русскими все нормально.
Использую api (gds32.dll)

Картинки пробовал читать,сохранять (>20килов)?
Записан
Rainbow
Гость
« Ответ #8 : Май 24, 2005, 12:54 »

Какую кодировку символов используете?
Если ascii, тодо надо стелеть такое:
Код:

  m_ptCodec = QTextCodec::codecForName("utf8");
//....
m_ptCodec->toUnicode(sqTemperature.value(0).toString().utf8()));

У меня в р всяком случае весь прожэкт сделан на FireBirde.
По поводу блобов, то действительно есть один глюк. Вот только непонятно чей это. Как на меня это скорее всего глюк быблиотеки FB.

Представляю файл qsql_ibase.cpp
Код:

QVariant QIBaseResultPrivate::fetchBlob(ISC_QUAD *bId)
{
    isc_blob_handle handle = 0;

    isc_open_blob2(status, &ibase, &trans, &handle, bId, 0, 0);
    if (isError("Unable to open BLOB", QSqlError::Statement))
return QVariant();

    unsigned short len = 0;
    static char blob_items[] = {
      isc_info_blob_max_segment,
        isc_info_blob_num_segments,
        isc_info_blob_type};
    char res_buffer[32];
    int length;
    ISC_STATUS stat = isc_blob_info(status, &handle,sizeof(blob_items), blob_items,
      sizeof(res_buffer), res_buffer);
    char *p, item;
    long max_size = 0L, num_segments = 0L;
    for (p = res_buffer; *p != isc_info_end ;)
    {
      item = *p++;
        length = (short)isc_vax_integer(p, 2);
      p += 2;
      switch (item)
      {
      case isc_info_blob_max_segment:
        max_size = isc_vax_integer(p, length);
        break;
      case isc_info_blob_num_segments:
        num_segments = isc_vax_integer(p, length);
        break;
      case isc_info_truncated:
        /* handle error */
        break;
      default:
        break;
      }
      p += length;
    };
    QByteArray ba(max_size);
    uint osize = max_size;

    for (int i=0; i<num_segments; i++)
    {
      stat = isc_get_segment(status, &handle, &len, osize, ba.data() + osize*i);
      ba.resize(ba.size() + len);
    }
    bool isErr = isError("Unable to read BLOB", QSqlError::Statement);
 
    isc_close_blob(status, &handle);
    if (isErr)
return QVariant();

ba.resize(ba.size()-max_size);
  printf("Error %d length is %d\n", isErr, ba.size());

    return ba;
}
///...........
void QIBaseResultPrivate::writeBlob(int i, const QByteArray &ba)
{
    isc_blob_handle handle = 0;
    ISC_QUAD *bId = (ISC_QUAD*)inda->sqlvar[i].sqldata;
    isc_create_blob2(status, &ibase, &trans, &handle, bId, 0, 0);
    if (!isError("Unable to create BLOB", QSqlError::Statement)) {
uint i = 0;
while (i < ba.size()) {
   isc_put_segment(status, &handle, QMIN(ba.size() - i, SHRT_MAX), ba.data()+i);
   if (isError("Unable to write BLOB"))
break;
   i += SHRT_MAX;
}
    }
    isc_close_blob(status, &handle);
}


Это дело проверено. Пока что проблем с чтением/записью не возникало.
Записан
Kostya.
Гость
« Ответ #9 : Май 24, 2005, 14:00 »

Цитата: "GrolfCry"
Цитата: "Kostya."
Пользую уже больше полугода Qt 3.3.0 и Firebird (interbase), с русскими все нормально.
Использую api (gds32.dll)

Картинки пробовал читать,сохранять (>20килов)?


Если имеется ввиду работал ли я с полями типа blob то да, работаю.
Только не очень большими, до 20 килов не дотянут.
Записан
Rainbow
Гость
« Ответ #10 : Май 24, 2005, 14:54 »

Цитата: "GrolfCry"
Картинки пробовал читать,сохранять (>20килов)?

Кстате даже не 20 а 16384 байта и ни байта больше.
Записан
GrolfCry
Гость
« Ответ #11 : Май 25, 2005, 05:10 »

Цитата: "Rainbow"
Цитата: "GrolfCry"
Картинки пробовал читать,сохранять (>20килов)?

Кстате даже не 20 а 16384 байта и ни байта больше.

Точно  Веселый
Записан
Rainbow
Гость
« Ответ #12 : Май 25, 2005, 11:19 »

Цитата: "GrolfCry"

Точно  Веселый

А лекарство пробывал использовать?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.092 секунд. Запросов: 20.