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

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

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


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

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

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

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

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

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

Возможно у автора структура сериализована в BLOB поле, а ему необходимо его считать и десериализовать в структуру?
...
Рейтинг: 0 / 0
02.09.2012, 13:46
    #37940363
dlazarev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помощи в работе через ODBC
БД - 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
02.09.2012, 14:18
    #37940381
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помощи в работе через ODBC
Тебе надо двигаться в сторону соотв. конференции по Cache.
Желаю успехов.

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

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

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

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

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

Сорри, скрин не тот. Того кода у меня сейчас нет, но он отличается только тем, что там SQLBindParm вызывается для структурки, и в запросе SET
Код: sql
1.
Addr = ?
...
Рейтинг: 0 / 0
02.09.2012, 18:37
    #37940513
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помощи в работе через ODBC
А табличку поменять сможете? вычисляемых полей добавить?
...
Рейтинг: 0 / 0
02.09.2012, 19:05
    #37940530
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помощи в работе через ODBC
Тут все усугубляет то, что каше сама меняет типы данных, и к хранению самого значения привязаться сложно.
Поэтому сделаю чисто на строках, а вы уже подумаете, как битовое хранение числа превратить в представление каше.
Код: 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
02.09.2012, 22:56
    #37940631
dlazarev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помощи в работе через ODBC
Блок А.Н.,

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


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