powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / sql
14 сообщений из 14, страница 1 из 1
sql
    #34790976
Voitovych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT Count(*)
   INTO :lHowMany
    FROM identity_5;
Если можно, то как вместо указания КОНКРЕТНОГО ИМЕНИ ТАБЛИЦЫ
Указать его в строке. Так как показано ниже - НЕПРАВИЛЬНО:

string ls_nametable
ls_nametable = "identity_5"
SELECT Count(*)
   INTO :lHowMany
    FROM :ls_nametable ; 
...
Рейтинг: 0 / 0
sql
    #34791074
Фотография urvas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотри в сторону динамического SQL.
...
Рейтинг: 0 / 0
sql
    #34791589
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
string ls_sql
ls_sql = ...
EXECUTE IMMEDIATE :ls_sql;
...
Рейтинг: 0 / 0
sql
    #34791608
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
DECLARE cursor1 DYNAMIC CURSOR FOR sqlsa;
PREPARE sqlsa FROM :ls_sql;
OPEN DYNAMIC cursor1 USING :lHowMany;
DO 
 FETCH cursor1 INTO :lHowMany;
 ..........
 IF sqlsa.SqlCode =  100  THEN ENIT
LOOP WHILE TRUE
CLOSE cursor1;
...
Рейтинг: 0 / 0
sql
    #34791939
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Riska
EXECUTE IMMEDIATE ... не подойдет т.к. нада возвращать результат в INTO,
а вот ... DYNAMIC CURSOR ... это то что дохтур прописал.
Только форму надо выбрать под задачу.
...
Рейтинг: 0 / 0
sql
    #34793180
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulJB 2 Riska
EXECUTE IMMEDIATE ... не подойдет т.к. нада возвращать результат в INTO,
а вот ... DYNAMIC CURSOR ... это то что дохтур прописал.
Только форму надо выбрать под задачу.
Верно. Для SELECTа "EXECUTE IMMEDIATE" не подходит. Я, как обычно, сначала ответил, а потом подумал. Поэтому и дописал вдогонку.
...
Рейтинг: 0 / 0
sql
    #34795795
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может лучше процедурой?

на базе:
create procedure spu_test
@table_name varchar(255)
as
set nocount on
execute('select count(*) from ' + @table_name)
go

на билдере:
DECLARE spu_test PROCEDURE FOR spu_test
@table_name = :ls_nametable;
SetPointer(HourGlass!)
EXECUTE spu_test;
SetPointer(Arrow!)
IF sqlca.SQLCode = -1 THEN
MessageBox("SQL Error", sqlca.SQLErrText)
ELSE
FETCH spu_test INTO :l_knt;
IF sqlca.SQLCode = -1 THEN
MessageBox("SQL Error", sqlca.SQLErrText)
END IF
END IF

CLOSE spu_test ;
...
Рейтинг: 0 / 0
sql
    #34799781
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тогда до кучи можно предложить сделать Datastore, с селектом и одним полем, и динамически менять SQL.
...
Рейтинг: 0 / 0
sql
    #34799932
Фотография urvas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда уж сразу динамически создавать и убивать DataWinow, как это описано в HELP'е:


The following statements create a grid DataWindow dw_1 from the DataWindow source generated in the SyntaxFromSQL function. If errors occur, the string ERRORS contains any error messages that are generated, which are displayed to the user in a message box. Note that you need to call SetTransObject with SQLCA as its argument before you can call the Retrieve function:

string ERRORS, sql_syntax

string presentation_str, dwsyntax_str

sql_syntax = "SELECT emp_data.emp_id,"&

+ "emp_data.emp_name FROM emp_data "&

+ "WHERE emp_data.emp_salary > 45000"

presentation_str = "style(type=grid)"

dwsyntax_str = SQLCA.SyntaxFromSQL(sql_syntax, &

presentation_str, ERRORS)

IF Len(ERRORS) > 0 THEN

MessageBox("Caution", &

"SyntaxFromSQL caused these errors: " + ERRORS)

RETURN

END IF

dw_1.Create( dwsyntax_str, ERRORS)

IF Len(ERRORS) > 0 THEN

MessageBox("Caution", &

"Create cause these errors: " + ERRORS)

RETURN

END IF
...
Рейтинг: 0 / 0
sql
    #34799961
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще вот такая ф-я

Код: 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.
$PBExportHeader$f_selectfirst.srf
$PBExportComments$. $Id: f_selectfirst.srf,v  1 . 3   2003 / 01 / 21   14 : 38 : 40  lachinfophg Exp $
global type f_selectfirst from function_object
end type

forward prototypes
global function integer f_selectfirst (readonly string query, ref any outparm[])
end prototypes

global function integer f_selectfirst (readonly string query, ref any outparm[]);
/*this function selects only first row of data from the result set */
/*defined by query parameter */
/*and returns it into an array outparm*/

/*returns 1 if everything is Ok */
/*returns 2 if everything is Ok but more then one rows found */
/*        0 if no rows found */
/*       -1 if error */

long i
int ret= 0 
	
DECLARE src_cursor DYNAMIC CURSOR FOR SQLSA;
PREPARE SQLSA FROM :query using SQLCA;
DESCRIBE SQLSA INTO SQLDA;
OPEN DYNAMIC src_cursor USING DESCRIPTOR SQLDA;
if SQLCA.sqlcode=- 1  then 
	//show error here
	messageBox(getApplication().displayname, sqlca.sqlerrtext)
	return - 1 
end if
FETCH src_cursor USING DESCRIPTOR SQLDA;
if SQLCA.sqlcode= 0  then
	if SQLDA.NumOutputs> 0  then
		for i= 1  to SQLDA.NumOutputs
			CHOOSE CASE SQLDA.OutParmType[i]
				CASE TypeDate!
					outparm[i]=SQLDA.GetDynamicDate(i)
				CASE TypeDateTime!
					outparm[i]=SQLDA.GetDynamicDateTime(i)
				CASE TypeDecimal!,TypeDouble!,TypeReal!,TypeUInt!,TypeULong!,TypeBoolean!,TypeLongLong!
					outparm[i]=SQLDA.GetDynamicNumber(i)
				CASE TypeLong!
					outparm[i]=long(SQLDA.GetDynamicNumber(i))
				CASE TypeInteger!,TypeByte!
					outparm[i]=integer(SQLDA.GetDynamicNumber(i))
				CASE TypeString!
					outparm[i]=SQLDA.GetDynamicString(i)
				CASE TypeTime!
					outparm[i]=SQLDA.GetDynamicTime(i)
			END CHOOSE
		next
		ret= 1 
	end if
	FETCH src_cursor USING DESCRIPTOR SQLDA;
	if sqlca.sqlcode= 0  then ret= 2 
end if
if SQLCA.sqlcode=- 1  then 
	//show error here...
	messageBox(getApplication().displayname, sqlca.sqlerrtext)
	ret=- 1 
end if
close src_cursor;

return ret
end function
...
Рейтинг: 0 / 0
sql
    #34800107
Voitovych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторСмотри в сторону динамического SQL.
не было времени ходить на компьютер, где имеется доступ к интернету,
воопользовался самой первой подсказкой, удалось самому сделать,

Выбрал формат 3 динамического запроса – всё ОК!
ТЕМ не менее БЛАГОДАРЮ ВСЕХ.
Если кто-либо захочет воспользоваться
Кодом , предложенным RISKA, ТО ОБРАТИТЕ
ВНИМАНИЕ НА ОШИБКУ В КНИГЕ по PB5.0
Строка должна иметь вид:
IF sqlsa.SqlCode = 100 THEN ENIT
IF sqlca.SqlCode = 100 THEN EXIT
Должно быть sqlca , а напечатано в книге sqlsa

2. voronk или кто знает, к какому типу базы данных
относятся показанные тексты процедур ?
к ASA 9.0 НЕ ПОДХОДЯТ или я не умею.
...
Рейтинг: 0 / 0
sql
    #34800164
Фотография urvas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В книжке всё ПРАВИЛЬНО прописано про SQLSA:
...
Рейтинг: 0 / 0
sql
    #34800210
Voitovych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
В книжке всё ПРАВИЛЬНО прописано про SQLSA:

Показанный ниже код работает правильно
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
DECLARE  icur_identity DYNAMIC CURSOR FOR sqlsa;
ls_sql1 = "SELECT Tn, date_1 FROM " + asNameTable
PREPARE sqlsa FROM :ls_sql1;
OPEN icur_identity ;  
DO
FETCH icur_identity INTO
:li_tn , :ld_date_1;
IF sqlca.SqlCode =  100  then EXIT // соответствует EOF
IF SQLCA.SQLCode = - 1  THEN 
        MessageBox("SQL error", SQLCA.SQLErrText)
END IF
LOOP WHILE True
CLOSE icur_identity
...
Рейтинг: 0 / 0
sql
    #34800219
Voitovych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to авторvoronk

К базе типа ASA 9.0 синтаксис
Хранимых процедур не подходит.
Интересно для SQL Server or Oracle ?
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / sql
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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