Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Опять о dynamic - sql и blob! / 8 сообщений из 8, страница 1 из 1
08.02.2005, 07:49
    #32905138
AIZ
AIZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять о dynamic - sql и blob!
Доброго времени суток всем! Проблема 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
08.02.2005, 16:46
    #32906574
alexis glinski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять о dynamic - sql и blob!
SELECTBLOB это фича PowerBuilder'a, а не SQL, поэтому динамически его нельзя вызвать ...

imho ...
...
Рейтинг: 0 / 0
08.02.2005, 18:45
    #32906858
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять о dynamic - sql и blob!
...
Рейтинг: 0 / 0
09.02.2005, 07:06
    #32907293
AIZ
AIZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять о dynamic - sql и blob!
Да, это я сплоховал, насчет SELECTBLOB, не сразу сообразил. Только динамический SELECT выборки BLOB рушит PB мгновенно.
Филлипу К сожалению в этом топике нет информации, я его читал, а рекамендованная Вами ссылка у меня не открывается. Но, все равно, спасибо за участие. И Все-таки, что делать?
...
Рейтинг: 0 / 0
09.02.2005, 13:31
    #32908126
alexis glinski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять о dynamic - sql и blob!
вот что по ссылочке лежит:
Код: 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
09.02.2005, 13:55
    #32908189
AIZ
AIZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять о dynamic - sql и blob!
Спасибо alexis_glinski! Буду разбираться.
...
Рейтинг: 0 / 0
09.02.2005, 14:43
    #32908305
AIZ
AIZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять о dynamic - sql и blob!
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
09.02.2005, 16:06
    #32908577
AIZ
AIZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять о dynamic - sql и blob!
DECLARE mycursor DYNAMIC CURSOR FOR SQLSA;
ls_sql = " SELECT cast(" + is_column + " as LONG
VARCHAR )
Все понятно, это синтаксис MS SQL, а для ORACLE неясно в какой тип преобразовывать. Long-и не работают, а varchar2 коротковато для таких дел.
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Опять о dynamic - sql и blob! / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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