Гость
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Всегда пустой результат SELECT'a из Cache по ODBC / 16 сообщений из 16, страница 1 из 1
06.06.2014, 10:15
    #38663213
daynin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Всегда пустой результат SELECT'a из Cache по ODBC
Здравствуйте, я пробовал выполнить простой SELECT из таблицы. Подключение по ODBC проходит. Запрос выполняется, но в результате приходят только заголовки таблиц, но самих записей нет. Пробовал выполнять один и тот же запрос и в C#, и в C++(QT) проекте. Подскажите, пожалуйста, в чем может быть проблема?

Заранее благодарю!
...
Рейтинг: 0 / 0
06.06.2014, 10:17
    #38663215
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Всегда пустой результат SELECT'a из Cache по ODBC
dayninПодскажите, пожалуйста, в чем может быть проблема?Код приведите.
...
Рейтинг: 0 / 0
06.06.2014, 10:26
    #38663223
daynin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Всегда пустой результат SELECT'a из Cache по ODBC
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
using System;
using System.Collections.Generic;
using System.Data.Odbc;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ODBCTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string queryString = "SELECT * FROM SQLUser.ACCOUNTS";
            var command = new OdbcCommand(queryString);

            string connectionString = "DRIVER={InterSystems ODBC};SERVER=localhost;PORT=1972;DATABASE=USER;UID=_system;PWD=SYS;";
            using (var connection = new OdbcConnection(connectionString))
            {
                command.Connection = connection;
                connection.Open();
                var result = command.ExecuteReader();
            }
        }
    }
}



Это пример на C#.
...
Рейтинг: 0 / 0
06.06.2014, 10:32
    #38663231
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Всегда пустой результат SELECT'a из Cache по ODBC
dayninно в результате приходят только заголовки таблиц, но самих записей нет.А вы уверены что записи в таблице вообще есть ? проверьте выполнение запроса в портале управления, и можно еще включить вывод в режиме ODBC
...
Рейтинг: 0 / 0
06.06.2014, 10:34
    #38663235
daynin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Всегда пустой результат SELECT'a из Cache по ODBC
Данные точно есть. Такое поведение наблюдается и в том случае, когда я делаю SELECT из таблиц пространства имен SAMPLES самой Cache.
...
Рейтинг: 0 / 0
06.06.2014, 10:38
    #38663240
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Всегда пустой результат SELECT'a из Cache по ODBC
daynin ,

Покажите как Вы проверяете в коде, что данных нет (или они есть).
Не увидел вывода данных в Вашем коде.
...
Рейтинг: 0 / 0
06.06.2014, 10:38
    #38663241
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Всегда пустой результат SELECT'a из Cache по ODBC
dayninДанные точно есть. Такое поведение наблюдается и в том случае, когда я делаю SELECT из таблиц пространства имен SAMPLES самой Cache.Если через портал управления, тоже ничего не отображается, то откуда уверенность что данные есть ? и откуда вы их ожидаете увидеть в вашем C# приложении, если даже портал управления данные не показывает.
покажите описание вашего класса из которого вы тянете данные.
...
Рейтинг: 0 / 0
06.06.2014, 10:50
    #38663257
daynin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Всегда пустой результат SELECT'a из Cache по ODBC
servit daynin ,

Покажите как Вы проверяете в коде, что данных нет (или они есть).
Не увидел вывода данных в Вашем коде.Дебагом проверяю. Ставлю брейкпоинт и смотрю. Могу, кончено, пирвести пример с выводом. Но это ничего не изменит.

DAiMordayninДанные точно есть. Такое поведение наблюдается и в том случае, когда я делаю SELECT из таблиц пространства имен SAMPLES самой Cache.Если через портал управления, тоже ничего не отображается, то откуда уверенность что данные есть ? и откуда вы их ожидаете увидеть в вашем C# приложении, если даже портал управления данные не показывает.Данные есть. Я проверял в том числе и Cache Monitor'ом. Да и опять же я выше говорил о том, что аналогично селек ничего не возвращает кроме заголовков и при запросе из таблиц, которые предоставляет Cache в качестве тестовых (в которых данные точно есть (и да, я это проверял)).
DAiMor покажите описание вашего класса из которого вы тянете данные.Я не использую биндинг к классам. Хочу получать данные в виде result set'а просто выполнив SQL-запрос.
...
Рейтинг: 0 / 0
06.06.2014, 10:55
    #38663265
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Всегда пустой результат SELECT'a из Cache по ODBC
Тем не менее, для того, чтобы была таблица, нужно описать класс. Биндинг тут ни при чем.
...
Рейтинг: 0 / 0
06.06.2014, 10:58
    #38663270
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Всегда пустой результат SELECT'a из Cache по ODBC
У меня данные прекрасно отображаются.
Попробуйте следующий код ( Unicode SQLTypes=1 в том случае, если у Вас Unicode-версия):
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
using (var connection = new OdbcConnection("DRIVER={InterSystems ODBC35};SERVER=localhost;PORT=1972;DATABASE=SAMPLES;UID=_system;PWD=SYS;Unicode SQLTypes=1;"))
{
  using (var command = new OdbcCommand("SELECT top 3 * FROM Sample.Person", connection))
  {
    connection.Open();
    var result = command.ExecuteReader();
    while (result.Read())
    {
      //textBox1.Text += result["SSN"] + Environment.NewLine;
      Console.WriteLine(result["SSN"]);
    };
  }
}
...
Рейтинг: 0 / 0
06.06.2014, 11:58
    #38663394
daynin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Всегда пустой результат SELECT'a из Cache по ODBC
servitУ меня данные прекрасно отображаются.
Попробуйте следующий код ( Unicode SQLTypes=1 в том случае, если у Вас Unicode-версия):
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
using (var connection = new OdbcConnection("DRIVER={InterSystems ODBC35};SERVER=localhost;PORT=1972;DATABASE=SAMPLES;UID=_system;PWD=SYS;Unicode SQLTypes=1;"))
{
  using (var command = new OdbcCommand("SELECT top 3 * FROM Sample.Person", connection))
  {
    connection.Open();
    var result = command.ExecuteReader();
    while (result.Read())
    {
      //textBox1.Text += result["SSN"] + Environment.NewLine;
      Console.WriteLine(result["SSN"]);
    };
  }
}



Спасибо! В C# действительно работает!

Но почему-то же самое но в QT не работает:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
#include <QCoreApplication>
#include <QtCore>
#include <QtSql>
#include "iostream"

int main(int argc, char *argv[])
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    db.setDatabaseName("DRIVER={InterSystems ODBC};SERVER=localhost;PORT=1972;DATABASE=USER;UID=_system;PWD=SYS; Unicode SQLTypes=1;");

    if (!db.open())
    {
        std::cout << "Error opening database" << std::endl;
        return -1;
    }
    else
    {
        QSqlQuery query;
        if(query.exec("SELECT * FROM ACCOUNTS")){
            std::cout << "Select succses!" << std::endl;
        }

        while (query.next())
        {
            std::cout << "Getting results..." << std::endl;
            std::cout << query.value(0).toString().toStdString() << std::endl;
        }

        std::cout << "EXIT!" << std::endl;
        return 0;
    }
}



Блок А.Н.Тем не менее, для того, чтобы была таблица, нужно описать класс. Биндинг тут ни при чем.
Я таблицы нагенерил SQL скриптом через Cache Monitor (это в случае моих данных, но есть то данные для примера от самой Cache и с ними таже проблема).
...
Рейтинг: 0 / 0
06.06.2014, 13:57
    #38663578
daynin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Всегда пустой результат SELECT'a из Cache по ODBC
Еще если дернуть

Код: plaintext
1.
std::cout << query.lastError().text().toStdString();



После query.exec(...); то будет выведена следующая ошибка:

[Cache ODBC][State : S1106][Native Code 468] [C:\Qt\Tools\QtCreator\bin\build-OD
BC-Desktop_Qt_5_3_0_MSVC2012_OpenGL_32bit-Deb] Fetch type out of range QODBC3: U
nable to fetch firstEXIT!
...
Рейтинг: 0 / 0
06.06.2014, 16:09
    #38663829
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Всегда пустой результат SELECT'a из Cache по ODBC
dayninСпасибо! В C# действительно работает!

Но почему-то же самое но в QT не работает:Не работает, потому что
Код: plaintext
1.
DRIVER={InterSystems ODBC}

, а должно быть
Код: plaintext
1.
DRIVER={InterSystems ODBC35}


Следующий код у меня выводит данные без проблем:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
#include <QtSql>
#include "iostream"

int main()
{
  QSqlDatabase db = QSqlDatabase::addDatabase("QODBC3");

  db.setDatabaseName("DRIVER={InterSystems ODBC35};SERVER=localhost;PORT=1972;DATABASE=SAMPLES;UID=_system;PWD=SYS;Unicode SQLTypes=1;");

  if (!db.open())
  {
    std::cout << "Error opening database" << std::endl;
    return -1;
  }
  else
  {
    QSqlQuery query;
    if(query.exec("SELECT TOP 3 * FROM SAMPLE.PERSON")){
      std::cout << "Select success!" << std::endl;
    }

    while (query.next())
    {
      std::cout << "Getting results..." << std::endl;
      std::cout << query.value("SSN").toString().toStdString() << std::endl;
    }

    std::cout << "EXIT!" << std::endl;
    db.close();
    return 0;
  }

}
...
Рейтинг: 0 / 0
06.06.2014, 16:37
    #38663883
daynin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Всегда пустой результат SELECT'a из Cache по ODBC
servit,

Странно, у меня ваш код падает при попытке открыть соединение. Не могли бы вы сказать, какой драйвер вы используете при создании ODBC источника? Какая версия у вас Cache? И какая версия QT?

Заранее спасибо!
...
Рейтинг: 0 / 0
06.06.2014, 16:54
    #38663913
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Всегда пустой результат SELECT'a из Cache по ODBC
dayninКакая версия у вас Cache?Cache for Windows (x86-64) 2014.1.1 UnicodedayninИ какая версия QT?Qt 5.3.0 (x32)dayninкакой драйвер вы используете при создании ODBC источника?
Код: sql
1.
2.
3.
4.
CacheODBC.dll
CacheODBC64.dll
CacheODBC35.dll -- соответственно этот
CacheODBC3564.dll
...
Рейтинг: 0 / 0
08.06.2014, 14:18
    #38664619
daynin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Всегда пустой результат SELECT'a из Cache по ODBC
servitdayninКакая версия у вас Cache?Cache for Windows (x86-64) 2014.1.1 UnicodedayninИ какая версия QT?Qt 5.3.0 (x32)dayninкакой драйвер вы используете при создании ODBC источника?
Код: sql
1.
2.
3.
4.
CacheODBC.dll
CacheODBC64.dll
CacheODBC35.dll -- соответственно этот
CacheODBC3564.dll



Огромное спасибо за помощь! Дело было и в версии драйвера ODBC и в версии самой Cache (у меня была 2007). С Cache 2014 и драйвером ODBC35 все заработало!
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Всегда пустой результат SELECT'a из Cache по ODBC / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]