powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Нужен интерфейс к Cache для C++
25 сообщений из 47, страница 1 из 2
Нужен интерфейс к Cache для C++
    #37943305
dlazarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

Существует таблица Nameserv, у нее в поле Addr хранится структура в формате %Library.Binary

Сама структура состоит из
Код: plaintext
1.
unsigned char flag

и
Код: plaintext
1.
char address[14]



Мне нужно "вытащить" запись из таблицы по полю Addr, я знаю, что лучше это делать по каждому полю, т.е.
Код: sql
1.
SELECT * WHERE Addr.flag = '...' AND Addr.address = '...'



Подскажите пожалуйста интерфейс C++ к Cache, который поддерживает выборку структурированных объектов.
...
Рейтинг: 0 / 0
Нужен интерфейс к Cache для C++
    #37943817
Фотография П.С.М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dlazarev,

Вы хоть версию Cache скажите. Для начала...
...
Рейтинг: 0 / 0
Нужен интерфейс к Cache для C++
    #37944450
dlazarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
П.С.М.,

Версия 2009.1.0.446.0

Проблема следующая:

В коде на C++ есть структурка

Код: plaintext
1.
2.
3.
4.
struct Address{
unsigned char flag;
char address[14];
};



Эта структура записывается в поле Addr в формате %Library.Binary

Мне нужно "вытащить" запись из таблицы по полю Addr (предполагаю, что можно это как-то сделать по каждому члену, т.е.

Код: sql
1.
[src]SELECT * WHERE Addr.flag = '...' AND Addr.address = '...'

[/SRC]

Подскажите, пожалуйста, как это сделать или в каком направлении копать
...
Рейтинг: 0 / 0
Нужен интерфейс к Cache для C++
    #37944761
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dlazarevпредполагаю, что можно это как-то сделать по каждому члену, т.е.
Код: sql
1.
[src]SELECT * WHERE Addr.flag = '...' AND Addr.address = '...'

[/SRC]
Такой синтаксис применяется к полям типа "другой класс"... Т.е. это не твой случай...

А как в глобал записалась твоя "сишная структура"? Можешь посмотреть?
...
Рейтинг: 0 / 0
Нужен интерфейс к Cache для C++
    #37944778
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dlazarevЭта структура записывается в поле Addr в формате %Library.Binary
У нас это называется "тип поля/свойства"...
...
Рейтинг: 0 / 0
Нужен интерфейс к Cache для C++
    #37944820
dlazarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,

Она записывалась через ODBC,

Код: plaintext
1.
2.
3.
rc = SQLBindParameter(*hstmt, i++, SQL_PARAM_INPUT, SQL_C_BINARY,
			SQL_C_BINARY, NBosa_cMsgDbAddrLen, 0, (void *)&(DbHandle->row.nsrow.NSAddr), 
			NBosa_cMsgDbAddrLen, &(DbHandle->row.nsrow.AmtNSAddrLen));



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
// Install the values for the Addr & Flags
	DbHandle->row.nsrow.NSAddr				= *addr;
	DbHandle->row.nsrow.NSFlags			= flags;

// Create the SQL statement with the passed SiteName
_stprintf( sql_buffer, _T("UPDATE ccms.NBNSNameserv SET Addr=?, Flags=? WHERE Sitename ='%s'"), siteName ) ;

// Convert the UNICODE SQL string into MBCS string before sending to the SQL Server
NBsys_ODBCParmConvert( sqlstr, sql_buffer, sizeof( sqlstr ) ) ;

// Update Anything that matches the passed sitename.
rc = SQLExecDirect(DbHandle->hstmt, NBsys_ODBCText(sqlstr) ,  SQL_NTS);
...
Рейтинг: 0 / 0
Нужен интерфейс к Cache для C++
    #37944842
dlazarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,

т.е.
Код: plaintext
1.
DbHandle->row.nsrow.NSAddr

привязывается к соответствующему полю Addr, затем загружаем в
Код: plaintext
1.
DbHandle->row.nsrow.NSAddr

структуру, в запросе указываем
Код: sql
1.
SET Addr = ?

и SQLExecDirect как я понимаю подставляет вместо ? нужное представление.
...
Рейтинг: 0 / 0
Нужен интерфейс к Cache для C++
    #37944854
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dlazarevОна записывалась через ODBC
Дык пофиг как она там записывалась...
Ты можешь посмотреть как ноно таки записалось в глобал?

А сам SQL-запрос где делаешь? В Кашее? Или опять в сях?
...
Рейтинг: 0 / 0
Нужен интерфейс к Cache для C++
    #37944867
dlazarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,

авторТы можешь посмотреть как ноно таки записалось в глобал?

Как это посмотреть?

авторА сам SQL-запрос где делаешь? В Кашее? Или опять в сях?

Запрос из сей, я же кинул код
...
Рейтинг: 0 / 0
Нужен интерфейс к Cache для C++
    #37944936
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dlazarevавторТы можешь посмотреть как ноно таки записалось в глобал?
Как это посмотреть?
В редакторе глобалов... У меня он есть.
Если ты не знаешь - таки и не посмотришь...

В тарминале например можно посмотреть... Если знаешь ИД записи и кашейские команды...
Это тебе о чем-то говорит?

dlazarevавторА сам SQL-запрос где делаешь? В Кашее? Или опять в сях?
Запрос из сей, я же кинул код
Тогда вопрос скорее к техподдержке ИС... И звучит он так:
- Как мне посмотреть в С++ значение из вот такого вот класса, которые я записал из С++ вот таким вот макаром

Клас-то хоть тот кто делал?
...
Рейтинг: 0 / 0
Нужен интерфейс к Cache для C++
    #37945057
dlazarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,

авторЕсли ты не знаешь - таки и не посмотришь...

Можно посмотреть через System management portal?

авторКлас-то хоть тот кто делал?

В коде используются функции ODBC, как записать структуру в базу известно (но понятия не имею как это реализовано)
Насколько я знаю, ODBC не поддерживает выборку по структурированному объекту. Во всяком случае, мои попытки сделать по аналогии (читай:
Код: sql
1.
SELECT * WHERE Addr = ?

и т.д.) не увенчались успехом.

Поэтому мой вопрос звучит так: как мне из сей достать запись по полю с бинарным типом?
...
Рейтинг: 0 / 0
Нужен интерфейс к Cache для C++
    #37945072
dlazarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dlazarev,

Возможно есть какие-то другие интерфейсы к БД, через которые это можно сделать лекго и просто?
...
Рейтинг: 0 / 0
Нужен интерфейс к Cache для C++
    #37945075
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dlazarevМожно посмотреть через System management portal?
Можно и там... Если сможешь найти конечно...
...
Рейтинг: 0 / 0
Нужен интерфейс к Cache для C++
    #37945080
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dlazarevВозможно есть какие-то другие интерфейсы к БД, через которые это можно сделать лекго и просто?
Кащей это поезд!
Ту нужно все делать максимально просто - тогда он помчится по рельсам быстро. Если начать мудрить - получишь всякие проблемы во всяких "связках" и пр...
...
Рейтинг: 0 / 0
Нужен интерфейс к Cache для C++
    #37945096
dlazarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,

мне подойдет любой способ если он будет работать
...
Рейтинг: 0 / 0
Нужен интерфейс к Cache для C++
    #37945124
dlazarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,

Вообщем относительно этой таблицы там есть 2 глобали: ccms.NBNSNameservD ccms.NBNSNameservI
В ccms.NBNSNameservD:

Код: sql
1.
2.
3.
4.
5.
1:  ^ccms.NBNSNameservD = 1174 
2:  ^ccms.NBNSNameservD(1171) = $lb("",$c(2,0)_"'"_$c(16)_"ˬk"_$c(138,0,0,0,0,0,0,0,0),$c(0,0,0)_" ","","AACC-NCC") 
3:  ^ccms.NBNSNameservD(1172) = $lb("",$c(2,0)_"'"_$c(16)_"À¨k"_$c(134)_"®"_$c(1,15,0)_"hÐs"_$c(0),$c(0,0,0)_"@","","CC62-CORES2") 
4:  ^ccms.NBNSNameservD(1173) = $lb("",$c(2,0)_"'"_$c(16)_"À¨k"_$c(143)_","_$c(5,12,0)_"hÐ"_$c(22,2),$c(0,0,0)_"@","","CC63-CORES1") 
5:  ^ccms.NBNSNameservD(1174) = $lb("",$c(2,0)_"'"_$c(16)_"À¨k"_$c(145)_"Þ"_$c(5,20,0)_"hÐ0"_$c(2),$c(0,0,0)_"@","","CC63-CCMS1") 



Код: sql
1.
2.
3.
4.
5.
В ccms.NBNSNameservI:
1:  ^ccms.NBNSNameservI("NBNSNAMESERVPKEY2"," AACC-NCC",1171) = "" 
2:  ^ccms.NBNSNameservI("NBNSNAMESERVPKEY2"," CC62-CORES2",1172) = "" 
3:  ^ccms.NBNSNameservI("NBNSNAMESERVPKEY2"," CC63-CCMS1",1174) = "" 
4:  ^ccms.NBNSNameservI("NBNSNAMESERVPKEY2"," CC63-CORES1",1173) = "" 



Это то что нужно было найти?
...
Рейтинг: 0 / 0
Нужен интерфейс к Cache для C++
    #37945156
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dlazarevЭто то что нужно было найти?
Да. Молодец!

ccms.NBNSNameservD - данные (их я и хотел посмотреть)
ccms.NBNSNameservI - индексы

Вобщем моё предположение подтвердилось...
С точки зрения Кащея ты никак не сможешь работать с полем типа Binary... Т.е. именно брать из него "свои" поля.

А описание класса ты можешь менять? Т.е. уйти от этого типа (Binary)?
...
Рейтинг: 0 / 0
Нужен интерфейс к Cache для C++
    #37945167
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dlazarev , а что вообще должно было храниться в тех записях? Т.е. "человеческий вид" будет какой у данных? По тем ИД, что ты показал (1171-1174)...
...
Рейтинг: 0 / 0
Нужен интерфейс к Cache для C++
    #37945191
dlazarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,

Код: sql
1.
2.
3.
4.
5.
# ID      Sitename        Addr         Flags        Server 
1 1171  AACC-NCC       '&#192;&#168;k&#138;         <empty>   
2 1172  CC62-CORES2  '&#192;&#168;k&#134;®h&#208;s  @<empty>   
3 1173  CC63-CORES1  '&#192;&#168;k&#143;, h&#208;    @<empty>   
4 1174  CC63-CCMS1   '&#192;&#168;k&#145;&#222;h&#208;0   @<empty> 



В поле Addr по сути хранится представление структуры из unsigned char и char[14]

Менять нельзя, но думаю можно дополнительное поле добавить. Можно как-нибудь из Addr конвертировать данные в дополнительное поле, по которому уже читать?
...
Рейтинг: 0 / 0
Нужен интерфейс к Cache для C++
    #37945891
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dlazarev , т.е. та галиматья и храниться...

А как понять в твоём последнем сообщении где кончается Addr и начинается Flags? Они как-то слитно у тебя нарисованы...

Есть подозрение что в кащее они будут как некий текст храниться. Вот только вопрос как их там разделить.
...
Рейтинг: 0 / 0
Нужен интерфейс к Cache для C++
    #37945893
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dlazarevВ поле Addr по сути хранится представление структуры из unsigned char и char[14]
Мне это ничего не говорит...
...
Рейтинг: 0 / 0
Нужен интерфейс к Cache для C++
    #37945962
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dlazarev,

Вы храните в СУБД сишную структуру и почему то полагаете что СУБД сама догадается что это есть структура и как вам ее можно развернуть, это не так, думаю что вам либо нужно вашу структуру развернуть самим и заполнить в нормальное с точки зрения СУБД хранение, либо обрабытывать ее теми средствами которыми вы туда его сохранили
...
Рейтинг: 0 / 0
Нужен интерфейс к Cache для C++
    #37946025
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dlazarev Можно как-нибудь из Addr конвертировать данные в дополнительное поле, по которому уже читать?
можно, если научитесь разбирать формат данных. Например, записать в базу заранее известные данные (Флаг+Адрес), затем получить эти данные в Каше и вывести их через команду zzdump
Код: vbnet
1.
2.
3.
s id='5' //код записи с известным содержимым поля Addr
&sql(Select Addr Into :addr From ccms.NBNSNameservD Where ID=:id)
zzdump addr
...
Рейтинг: 0 / 0
Нужен интерфейс к Cache для C++
    #37946223
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можете выложить кусочек глобала с данными и описание класса?
...
Рейтинг: 0 / 0
Нужен интерфейс к Cache для C++
    #37946257
dlazarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.,

Описание класса:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Class ccms.NBNSNameserv Extends %Persistent [ ClassType = persistent, DdlAllowed, Owner = UnknownUser, Not ProcedureBlock, SqlRowIdPrivate, SqlTableName = NBNSNameserv, StorageStrategy = "" ]
{

Property Addr As %Library.Binary [ SqlColumnNumber = 3 ];

Property Flags As %Library.Binary [ SqlColumnNumber = 4 ];

Property Sitename As %Library.String(MAXLEN = 30, TRUNCATE = 0) [ Required, SqlColumnNumber = 2 ];

/// DDL Primary Key Specification
Index NBNSNAMESERVPKEY2 On Sitename [ Type = index, Unique ];

Property Server As %Library.Integer;



Глобаль:

Код: sql
1.
2.
3.
4.
5.
1:  ^ccms.NBNSNameservD = 1181 
2:  ^ccms.NBNSNameservD(1178) = $lb("",$c(2,0)_"'"_$c(16)_"&#192;&#168;k"_$c(138,0,0,0,0,0,0,0,0),$c(0,0,0)_" ","","AACC-NCC") 
3:  ^ccms.NBNSNameservD(1179) = $lb("",$c(2,0)_"'"_$c(16)_"&#192;&#168;k"_$c(134)_"®"_$c(1,15,0)_"h&#208;s"_$c(0),$c(0,0,0)_"@","","CC62-CORES2") 
4:  ^ccms.NBNSNameservD(1180) = $lb("",$c(2,0)_"'"_$c(16)_"&#192;&#168;k"_$c(143)_","_$c(5,12,0)_"h&#208;"_$c(22,2),$c(0,0,0)_"@","","CC63-CORES1") 
5:  ^ccms.NBNSNameservD(1181) = $lb("",$c(2,0)_"'"_$c(16)_"&#192;&#168;k"_$c(145)_"&#222;"_$c(5,20,0)_"h&#208;0"_$c(2),$c(0,0,0)_"@","","CC63-CCMS1") 
...
Рейтинг: 0 / 0
25 сообщений из 47, страница 1 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Нужен интерфейс к Cache для C++
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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