powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Опять о dynamic - sql и blob!
8 сообщений из 8, страница 1 из 1
Опять о dynamic - sql и blob!
    #32905138
Фотография AIZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток всем! Проблема blob при использовании dynamic-sql. Нужен обмен между БД. В частности ORACLE - ACCESS XP и наоборот, а также и с другими БД. Прочитал все об этом на форуме (29 ссылок), но ответа не нашел. Сылка от Филлипа не открывается, жаль. Если не трудно, еще раз подскажите! Очень нужно!
Вот что написал и что получил:

Формат 3.
DECLARE get_blob DYNAMIC CURSOR FOR SQLSA;
ls_selectblob = "SELECTBLOB " + ls_clobs[j] + " FROM " + ls_table + " " + ls_where
PREPARE SQLSA FROM :ls_selectblob USING SQLCA;
IF SQLCA.SQLCode <> 0 THEN
.....
END IF
OPEN DYNAMIC get_blob;
IF SQLCA.SQLCode <> 0 THEN
...
END IF
FETCH get_blob INTO :lbl_blob;
IF SQLCA.SQLCode <> 0 THEN
.....
END IF
CLOSE get_blob;

При открытии курсора ошибка. SQLErrText = SQLSTATE = 37000 [Microsoft][Драйвер ODBC Microsoft Access] Ошибочная инструкция SQL; предполагалось 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' или 'UPDATE'.
Спасибо, извините, что опять эти же вопросы!
...
Рейтинг: 0 / 0
Опять о dynamic - sql и blob!
    #32906574
alexis glinski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECTBLOB это фича PowerBuilder'a, а не SQL, поэтому динамически его нельзя вызвать ...

imho ...
...
Рейтинг: 0 / 0
Опять о dynamic - sql и blob!
    #32906858
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Опять о dynamic - sql и blob!
    #32907293
Фотография AIZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, это я сплоховал, насчет SELECTBLOB, не сразу сообразил. Только динамический SELECT выборки BLOB рушит PB мгновенно.
Филлипу К сожалению в этом топике нет информации, я его читал, а рекамендованная Вами ссылка у меня не открывается. Но, все равно, спасибо за участие. И Все-таки, что делать?
...
Рейтинг: 0 / 0
Опять о dynamic - sql и blob!
    #32908126
alexis glinski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот что по ссылочке лежит:
Код: 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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
//Code for Dynamic Select statement:
DECLARE mycursor DYNAMIC CURSOR FOR SQLSA;
ls_sql = " SELECT cast(" + 	is_column + " as LONG 
VARCHAR ) from " + is_table + " where " + ls_id_name 
+ " = " + string(il_id)

//PREPARE SQLSA FROM :ls_sql USING blob_connection;
PREPARE SQLSA FROM :ls_sql;
OPEN DYNAMIC mycursor;
IF SQLCA.SQLCODE <>  0  THEN
	MessageBox("Problem with Cursor", "SQLCODE: " 
+ STRING(SQLCA.SQLCODE) + "~r~n" + "SQLDBCODE: " + 
STRING(SQLCA.SQLDBCODE) + "~r~n" + "ERRORTEXT: "+ 
SQLCA.SQLERRTEXT, Information!, OK!)
ELSE
	FETCH mycursor INTO :ls_rtf;
	IF SQLCA.SQLCODE <>  0  THEN
		MessageBox("Problem with 
Select", "SQLCODE: " + STRING(SQLCA.SQLCODE) + "~r~n" 
+ "SQLDBCODE: " + STRING(SQLCA.SQLDBCODE) + "~r~n" 
+ "ERRORTEXT: "+ SQLCA.SQLERRTEXT, Information!, OK!)
	END IF	
END IF
				
rte_1.PasteRTF(ls_rtf, Detail! )
CLOSE mycursor;		

//Dynamic Update Statement
ls_rtf = rte_1.CopyRTF(FALSE, Detail!)

if len(ls_rtf) =  0  then
	ls_rtf = ' '
end if

ll_len = len(ls_rtf)

ls_hex = f_convert_char_to_hex(ls_rtf)

ls_rtf = ls_hex

ll_len = len(ls_rtf)

ls_rtf = '0x' + ls_rtf
lb_rtf = blob(ls_rtf)

if not isnull(lb_rtf) then
	//KEB - Actually move the file up to the db.
	SQLCA.Autocommit = TRUE

	ls_id = is_clean_table + '_id'
	
	ls_sql = " UPDATE " + is_table + " SET " + 
is_column + " = " + string(lb_rtf)
	ls_sql += " WHERE " + is_clean_table + '_id' 
+ " = " + string(il_id)
	
	execute immediate :ls_sql using sqlca; 
	
	SQLCA.Autocommit = FALSE   
	IF SQLCA.SQLCode <>  0  THEN
		MessageBox("Saving File", "SQLCode: 
~r~n" + string(SQLCA.SQLDBCode) + "~r~n" + 
SQLCA.SQLERRTEXT)
		RETURN
	END IF
			  
	IF SQLCA.SQLNRows >  0  THEN
		COMMIT USING SQLCA;
	ELSE
		MessageBox("Saving File", "Error 
saving to database")
		RETURN
	END IF
end if

//Functions to convert string to hex
// string f_convert_char_to_hex( string asString ) 
// Converts an input string into a hex character 
string

string sResult, sHexChar
decimal ld_len

decimal i

ld_len = len(asstring)

For i =  1  to Len( asString )

        sHexChar = f_convert_to_hex( Asc( Mid( 
asString, i,  1  ) ) )

        If Len( sHexChar ) =  1  Then sHexChar = "0" + 
sHexChar

        sResult = sResult + sHexChar
Next

Return sResult

// string f_convert_to_hex( long alNumber ), 
recursive:
// Recursive function to translate number into hex 
representation

If alNumber >  15  Then
        Return f_convert_to_hex( alNumber /  16  ) + 
f_dec_to_hex( Mod( alNumber,  16  ) )

Else
        Return f_dec_to_hex( alNumber )
End If

// string f_dec_to_hex ( integer aiNumber),  0  <= n <= 
 15  
// Converts integer from  0  -  15  into character hex 
representation

string sHexChar

Choose Case aiNumber
        Case  10 
                sHexChar = 'A'
        Case  11 
                sHexChar = 'B'
        Case  12 
                sHexChar = 'C'
        Case  13 
                sHexChar = 'D'
        Case  14 
                sHexChar = 'E'
        Case  15 
                sHexChar = 'F'
        Case Else
                sHexChar = String(aiNumber)
End Choose

Return sHexChar
...
Рейтинг: 0 / 0
Опять о dynamic - sql и blob!
    #32908189
Фотография AIZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо alexis_glinski! Буду разбираться.
...
Рейтинг: 0 / 0
Опять о dynamic - sql и blob!
    #32908305
Фотография AIZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DECLARE mycursor DYNAMIC CURSOR FOR SQLSA;
ls_sql = " SELECT cast(" + is_column + " as LONG
VARCHAR ) from " + is_table + " where " + ls_id_name
+ " = " + string(il_id)

А что такое cast(" + is_column + " as LONG VARCHAR )? ORACLE это не понимает!
...
Рейтинг: 0 / 0
Опять о dynamic - sql и blob!
    #32908577
Фотография AIZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DECLARE mycursor DYNAMIC CURSOR FOR SQLSA;
ls_sql = " SELECT cast(" + is_column + " as LONG
VARCHAR )
Все понятно, это синтаксис MS SQL, а для ORACLE неясно в какой тип преобразовывать. Long-и не работают, а varchar2 коротковато для таких дел.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Опять о dynamic - sql и blob!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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