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

Проблема следующая: мне нужно прочитать запись из БД по значению определенного поля, в этом поле записана структура. Мы имеем указатель на структуру.

Запрос имеет такой вид:
Код: sql
1.
SELECT Sitename FROM ccms.NBNSNameserv WHERE Addr = (здесь должно быть представление структуры понятное БД)


На приаттаченном скрине я попытался воспользоваться функциями FullBindColOnNSTable и FullBindParmOnNSTable (обертки над SQLBindCol и SQLBindParm соответственно), но ничего не работает.

Пожалуйста, подскажите решение. Спасибо!
...
Рейтинг: 0 / 0
Прошу помощи в работе через ODBC
    #37940350
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Проблема следующая: мне нужно прочитать запись из БД по значению определенного
> поля, в этом поле записана структура. Мы имеем указатель на структуру.
>

в поле БД не может быть структуры.
Так что давай думай дальше.

> Запрос имеет такой вид:
>
> SELECT SitenameFROM ccms.NBNSNameservWHERE Addr =(здесь должно быть представление структуры понятное БД)

Не бывает в реляционной БД структур. ODBC обычно работают с реляционными БД.
Что за СУБД у тебя ты не сообщаешь, но думаю там тоже нет структур.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Прошу помощи в работе через ODBC
    #37940354
Объектно-реляционные СУБД как ни странно бывают, но это ни о чем не говорит.

Возможно у автора структура сериализована в BLOB поле, а ему необходимо его считать и десериализовать в структуру?
...
Рейтинг: 0 / 0
Прошу помощи в работе через ODBC
    #37940363
dlazarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
БД - Cache database,

В поле Addr записывается именно структура, более того, у меня есть функция, которая читает запись по названию:
Код: sql
1.
SELECT Addr FROM ccms.NBNSNameserv WHERE Sitename = <название>


В этом случае проблем не возникает, т.к. строку можно легко вставить в запрос:
Код: plaintext
1.
_stprintf(sql_buffer, _T("SELECT Addr FROM ccms.NBNSNameserv WHERE Sitename = %s", siteName)



Мне же нужно вытащить название по структуре, и я не знаю как правильно это сделать.

Буду признателен за подсказку в решении или в каком направлении двигаться!
...
Рейтинг: 0 / 0
Прошу помощи в работе через ODBC
    #37940381
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тебе надо двигаться в сторону соотв. конференции по Cache.
Желаю успехов.

Модератор: Тема перенесена из форума "C++".
...
Рейтинг: 0 / 0
Прошу помощи в работе через ODBC
    #37940413
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажите структуру классов.
Вы либо чего-то недопонимаете, либо сделали какую-то хрень при проектировании. Не должно быть поле адреса структурой.
...
Рейтинг: 0 / 0
Прошу помощи в работе через ODBC
    #37940427
dlazarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В поле Addr записывается структура, которая состоит из unsign short и char[14]
Она записывается в бинарном виде. Мой вопрос в том, как мне отразить эту структуру в запросе WHERE Addr = <...>, чтобы БД смогла выдать нужную запись.
...
Рейтинг: 0 / 0
Прошу помощи в работе через ODBC
    #37940430
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Структура на уровне С,
а вы хотите на уровне базы с ней работать?
Сомнительная затея, по-моему.
...
Рейтинг: 0 / 0
Прошу помощи в работе через ODBC
    #37940434
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя можно попробовать. Без особой надежды, правда (если вы на уровне каше не собираетесь работать с бинарными данными).
На уровне идеи - сделать поле Addr сериализуемым, и метод десериализации написать самому (сам не до конца понял, что сказал).

Но более правильно как-то перестроить идеологию работы. Это возможно?
...
Рейтинг: 0 / 0
Прошу помощи в работе через ODBC
    #37940446
dlazarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.,

авторНо более правильно как-то перестроить идеологию работы. Это возможно?
К сожалению, нет

Дело в том, что в этой табличке никаких методов нет (только проперти). Тем не менее, есть код на плюсах, который используя обертку функции SQLBindParm, записывает в поле Addr структурку (скрин приаттачен)

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

Сорри, скрин не тот. Того кода у меня сейчас нет, но он отличается только тем, что там SQLBindParm вызывается для структурки, и в запросе SET
Код: sql
1.
Addr = ?
...
Рейтинг: 0 / 0
Прошу помощи в работе через ODBC
    #37940513
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А табличку поменять сможете? вычисляемых полей добавить?
...
Рейтинг: 0 / 0
Прошу помощи в работе через ODBC
    #37940530
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут все усугубляет то, что каше сама меняет типы данных, и к хранению самого значения привязаться сложно.
Поэтому сделаю чисто на строках, а вы уже подумаете, как битовое хранение числа превратить в представление каше.
Код: vbnet
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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
Class Test.T1 Extends %Persistent
{

/// Кодированное значение, оно хранится
Property EncData As %String;

/// Первая декодированная часть, вычисляется на лету
Property EncData1 As %Integer [ Calculated, SqlComputeCode = {s {EncData1}=..Decode1({EncData})}, SqlComputed ];

/// Первая декодированная часть, вычисляется на лету
Property EncData2 As %String [ Calculated, SqlComputeCode = {s {EncData2}=..Decode2({EncData})}, SqlComputed ];

/// Создает запись
/// d ##class(Test.T1).CreateRecod(10,"Вася")
ClassMethod CreateRecod(value1 As %Integer, value2 As %String) As %String
{
	s encdata=value1_"#"_value2
	&sql(insert into test.t1(encdata) values(:encdata))
	q %ROWID
}
///Декодируем первую часть
ClassMethod Decode1(value As %String)
{
	q $p(value,"#",1)
}
///Декодируем вторую часть
ClassMethod Decode2(value As %String)
{
	q $p(value,"#",2)
}
/// Показать содержимое таблицы
/// d ##class(Test.T1).ShowTable()
Classmethod ShowTable()
{
	&sql(declare test cursor for select encdata1,encdata2 into :d1,:d2 from test.t1)
	&sql(open test)
	for
	{
		&sql(fetch test) q:SQLCODE
		w !,d1," ",d2
		
	}
	&sql(open test)
}
}



Код: vbnet
1.
2.
3.
4.
5.
6.
7.
USER>d ##class(Test.T1).CreateRecod(10,"Вася")
USER>d ##class(Test.T1).ShowTable()
 
10 Вася
USER>zw ^Test.T1D
^Test.T1D=1
^Test.T1D(1)=$lb("","10#Вася")
...
Рейтинг: 0 / 0
Прошу помощи в работе через ODBC
    #37940631
dlazarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.,

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


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