powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Генератор скрипта на создание таблицы
13 сообщений из 13, страница 1 из 1
Генератор скрипта на создание таблицы
    #35510313
LUCIAN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Из правил форума на SQL.RU:
При написании сообщений с просьбой о составлении запроса - хорошим тоном считается предоставление скрипта на создание таблицы и заполнение ее текстовыми данными, а также ожидаемого результата выборки, если это не очевидно из вопроса.
Предлагаю сл. генератор скрипта на создание таблицы:

Код: 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.
LOCAL KPL,TEKST,NK,NT,WT,NAMT,I,NPL
NAMT=ALIAS()
kpl=AFIELDS(SU)
x=FCREATE("SKRIPT.PRG")
	TEKST="*СОЗДАНИЕ КУРСОРА ИЗ "+NAMT
	=FPUTS(X,TEKST)
	=FPUTS(X," ")

=FPUTS(X,"SELE 0")
TEKST="CREATE CURSOR C"+NAMT+" ("
FOR I= 1  TO M.kpl
	TEKST=TEKST+SU(I, 1 )+" "+SU(I, 2 )+"("+LTRIM(STR(SU(I, 3 ), 3 ))+IIF(SU(I, 4 )= 0 ,"",","+LTRIM(STR(SU(I, 4 ), 3 )))+")"+IIF(I=M.kpl,")",",")
ENDFOR
=FPUTS(X,TEKST)

SCAN 
	TEKST ="INSERT INTO C"+NAMT+" ("
	FOR I= 1  TO M.kpl
		TEKST=TEKST+SU(I, 1 )+IIF(I=M.kpl,")",",")
	ENDFOR
	TEKST=TEKST+" VALUES ("
	FOR I= 1  TO M.kpl
		tip=SU(I, 2 )	
		NPL=SU(I, 1 )
		ZN=&NPL
		DL=SU(I, 3 )
		KD=SU(I, 4 )
		KD=IIF(TYPE("KD")="C", 0 ,KD)
		do case
			case tip="C"
				 TEKST=TEKST+"'"+ZN++"'"
 			case tip="D"
 				 TEKST=TEKST+"CTOD('"+DTOC(ZN)+"')"
			case tip="L"
				 TEKST=TEKST+IIF(ZN,".T.",".F.")
			case tip="N"
				 TEKST=TEKST+LTRIM(STR(ZN,DL,KD))
			case tip="I"
				 TEKST=TEKST+LTRIM(STR(ZN))
		endcase
		TEKST=TEKST+IIF(I=M.kpl,")",",")
	ENDFOR
	=FPUTS(X,TEKST)
ENDSCAN
=FCLOSE(x)
MODI COMM SKRIPT.PRG
DELETE FILE SKRIPT.PRG

Для создания скрипта достаточно открыть таблицу, установив нужный фильтр или создать курсор,выбрать область где находится таблица и запустить на выполнение код генератора. Как видно из кода, генератор может создать скрипты для таблиц у которых поля типа:"C","D","L","N","I"
...
Рейтинг: 0 / 0
Генератор скрипта на создание таблицы
    #35512169
ПД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чё та я не понял вашего лисапеда..
GENDBC.PRG видели?
...
Рейтинг: 0 / 0
Генератор скрипта на создание таблицы
    #35512187
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ql.ru> сообщил/сообщила в новостях следующее: news:6123031@sql.ru...
> Автор: ПД
> Чё та я не понял вашего лисапеда..
> GENDBC.PRG видели?


В сам код не вникал, но после беглого просмотра понятно, что это генератор
ПРОГРАММЫ, которая создаст и НАПОЛНИТ курсор/таблицу. Для чего это может
понадобится? Для того, чтобы задавая вопрос: "Вот у меня есть две таблички,
как бы мне из них ..." можно было паривести код, который создаст эти
таблички, чтобы оформление вопроса соответствовало правилам данного форума.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Генератор скрипта на создание таблицы
    #35512268
LUCIAN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПДЧё та я не понял вашего лисапеда..
GENDBC.PRG видели?

Если на форум надо пример таблицы,курсора то по правилам SQL.RU надо предоставить скрипт
на создание этой таблицы,например следующий скрипт создан автоматич с помощью выше указанного генератора

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
*СОЗДАНИЕ КУРСОРА ИЗ QUERY
 
SELE  0 
CREATE CURSOR CQUERY (TN C( 5 ),FIO C( 40 ),KODOTD N( 3 ),NACO L( 1 ),DR D( 8 ))
INSERT INTO CQUERY (TN,FIO,KODOTD,NACO,DR) VALUES ('1    ','ГОТОВКО РОМУАЛЬД ИОСИФОВИЧ              ', 3 ,.T.,CTOD('24/04/1940'))
INSERT INTO CQUERY (TN,FIO,KODOTD,NACO,DR) VALUES ('2    ','ВЕЛИЧКО ЛЮЦИАН ГРИГОРЬЕВИЧ              ', 1 ,.F.,CTOD('09/02/1947'))
INSERT INTO CQUERY (TN,FIO,KODOTD,NACO,DR) VALUES ('3    ','ЛИСОВСКИЙ СТАНИСЛАВ ИВАНОВИЧ            ', 1 ,.F.,CTOD('24/08/1947'))
INSERT INTO CQUERY (TN,FIO,KODOTD,NACO,DR) VALUES ('4    ','БЫЧЕК ЕВГЕНИЙ НИКОЛАЕВИЧ                ', 10 ,.T.,CTOD('27/09/1941'))
INSERT INTO CQUERY (TN,FIO,KODOTD,NACO,DR) VALUES ('6    ','ПОЗНЯК НИКОЛАЙ ИВАНОВИЧ                 ', 23 ,.F.,CTOD('07/02/1954'))
INSERT INTO CQUERY (TN,FIO,KODOTD,NACO,DR) VALUES ('8    ','АНИСКЕВИЧ ИВАН ИВАНОВИЧ                 ', 45 ,.F.,CTOD('07/03/1950'))
INSERT INTO CQUERY (TN,FIO,KODOTD,NACO,DR) VALUES ('9    ','АРОДЬ ВАЦЛАВ ФРАНЦЕВИЧ                  ', 24 ,.F.,CTOD('16/02/1944'))
INSERT INTO CQUERY (TN,FIO,KODOTD,NACO,DR) VALUES ('10   ','БЕЙ ФРАНЦ БРОНИСЛАВОВИЧ                 ', 27 ,.F.,CTOD('23/02/1942'))
INSERT INTO CQUERY (TN,FIO,KODOTD,NACO,DR) VALUES ('15   ','БОГДАН ЗДИСЛАВ ИВАНОВИЧ                 ', 28 ,.F.,CTOD('17/11/1959'))
INSERT INTO CQUERY (TN,FIO,KODOTD,NACO,DR) VALUES ('13   ','БУДРА ЧЕСЛАВ АЛЬГЕДРАС                  ', 26 ,.F.,CTOD('09/03/1955'))
...
Рейтинг: 0 / 0
Генератор скрипта на создание таблицы
    #35512418
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это некрасиво: CTOD('09/03/1955')

Переделай так, чтобы было {^9999-99-99}

ps year(), month(), day()

'{^'+trans(year(ldField))+'-'+trans(month(ldField))+'-'+trans(day(ldField))+'}'


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Генератор скрипта на создание таблицы
    #35512462
LUCIAN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Galyamov Rinat Вот это некрасиво: CTOD('09/03/1955')
Переделай так, чтобы было {^9999-99-99}
ps year(), month(), day()
'{^'+trans(year(ldField))+'-'+trans(month(ldField))+'-'+trans(day(ldField))+'}'


Согласно этому замечанию код генератора скрипта приобрёл вид:

Код: 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.
LOCAL KPL,TEKST,NK,NT,WT,NAMT,I,NPL
NAMT=ALIAS()
kpl=AFIELDS(SU)
x=FCREATE("SKRIPT.PRG")
	TEKST="*СОЗДАНИЕ КУРСОРА ИЗ "+NAMT
	=FPUTS(X,TEKST)
	=FPUTS(X," ")

=FPUTS(X,"SELE 0")
TEKST="CREATE CURSOR C"+NAMT+" ("
FOR I= 1  TO M.kpl
	TEKST=TEKST+SU(I, 1 )+" "+SU(I, 2 )+"("+LTRIM(STR(SU(I, 3 ), 3 ))+IIF(SU(I, 4 )= 0 ,"",","+LTRIM(STR(SU(I, 4 ), 3 )))+")"+IIF(I=M.kpl,")",",")
ENDFOR
=FPUTS(X,TEKST)

SCAN 
	TEKST ="INSERT INTO C"+NAMT+" ("
	FOR I= 1  TO M.kpl
		TEKST=TEKST+SU(I, 1 )+IIF(I=M.kpl,")",",")
	ENDFOR
	TEKST=TEKST+" VALUES ("
	FOR I= 1  TO M.kpl
		tip=SU(I, 2 )	
		NPL=SU(I, 1 )
		ZN=&NPL
		DL=SU(I, 3 )
		KD=SU(I, 4 )
		KD=IIF(TYPE("KD")="C", 0 ,KD)
		do case
			case tip="C"
				 TEKST=TEKST+"'"+ZN++"'"
 			case tip="D"
 				 TEKST=TEKST+'{^'+trans(year(ZN))+'-'+trans(month(ZN))+'-'+trans(day(ZN))+'}'  &&"CTOD('"+DTOC(ZN)+"')"
			case tip="L"
				 TEKST=TEKST+IIF(ZN,".T.",".F.")
			case tip="N"
				 TEKST=TEKST+LTRIM(STR(ZN,DL,KD))
			case tip="I"
				 TEKST=TEKST+LTRIM(STR(ZN))
		endcase
		TEKST=TEKST+IIF(I=M.kpl,")",",")
	ENDFOR
	=FPUTS(X,TEKST)
ENDSCAN
=FCLOSE(x)
MODI COMM SKRIPT.PRG
DELETE FILE SKRIPT.PRG

После этих изменений получается такой скрипт:

Код: plaintext
1.
2.
3.
4.
5.
*СОЗДАНИЕ КУРСОРА ИЗ QUERY
 
SELE  0 
CREATE CURSOR CQUERY (TN C( 5 ),FIO C( 40 ),NACO L( 1 ),DR D( 8 ))
INSERT INTO CQUERY (TN,FIO,NACO,DR) VALUES ('905  ','ПЕТРАСИК ЛЮЦИАН КАЗИМИРОВИЧ             ',.F.,{^ 1954 - 1 - 8 })
...
Рейтинг: 0 / 0
Генератор скрипта на создание таблицы
    #35512482
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и datatime по тому же принципу :)


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Генератор скрипта на создание таблицы
    #35512643
LUCIAN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Galyamov Rinat]
Ну и datatime по тому же принципу :)
Тогда ,код генератора примет вид:

Код: 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.
LOCAL KPL,TEKST,NK,NT,WT,NAMT,I,NPL
NAMT=ALIAS()
kpl=AFIELDS(SU)
x=FCREATE("SKRIPT.PRG")
	TEKST="*СОЗДАНИЕ КУРСОРА ИЗ "+NAMT
	=FPUTS(X,TEKST)
	=FPUTS(X," ")

=FPUTS(X,"SELE 0")
TEKST="CREATE CURSOR C"+NAMT+" ("
FOR I= 1  TO M.kpl
	TEKST=TEKST+SU(I, 1 )+" "+SU(I, 2 )+"("+LTRIM(STR(SU(I, 3 ), 3 ))+IIF(SU(I, 4 )= 0 ,"",","+LTRIM(STR(SU(I, 4 ), 3 )))+")"+IIF(I=M.kpl,")",",")
ENDFOR
=FPUTS(X,TEKST)

SCAN 
	TEKST ="INSERT INTO C"+NAMT+" ("
	FOR I= 1  TO M.kpl
		TEKST=TEKST+SU(I, 1 )+IIF(I=M.kpl,")",",")
	ENDFOR
	TEKST=TEKST+" VALUES ("
	FOR I= 1  TO M.kpl
		tip=SU(I, 2 )	
		NPL=SU(I, 1 )
		ZN=&NPL
		DL=SU(I, 3 )
		KD=SU(I, 4 )
		KD=IIF(TYPE("KD")="C", 0 ,KD)
		do case
			case tip="C"
				 TEKST=TEKST+"'"+ZN++"'"
 			case tip="D"
 				 TEKST=TEKST+'{^'+trans(year(ZN))+'-'+trans(month(ZN))+'-'+trans(day(ZN))+'}'  &&"CTOD('"+DTOC(ZN)+"')"
			case tip="L"
				 TEKST=TEKST+IIF(ZN,".T.",".F.")
			case tip="N"
				 TEKST=TEKST+LTRIM(STR(ZN,DL,KD))
			case tip="I"
				 TEKST=TEKST+LTRIM(STR(ZN))
			case tip="T"
				 TEKST=TEKST+ ;
				 '{^'+trans(year(ZN))+'-'+trans(month(ZN))+'-'+trans(day(ZN))+' '+trans(hour(ZN))+':'+trans(minute(ZN))+':'+trans(sec(ZN))+'}'
		endcase
		TEKST=TEKST+IIF(I=M.kpl,")",",")
	ENDFOR
	=FPUTS(X,TEKST)
ENDSCAN
=FCLOSE(x)
MODI COMM SKRIPT.PRG
DELETE FILE SKRIPT.PRG

И если есть поле типа DATATIME,то порождается например такой скрипт:

Код: plaintext
1.
2.
3.
4.
5.
*СОЗДАНИЕ КУРСОРА ИЗ QUERY
 
SELE  0 
CREATE CURSOR CQUERY (NZ N( 2 ),WRNAC T( 8 ))
INSERT INTO CQUERY (NZ,WRNAC) VALUES ( 22 ,{^ 2008 - 8 - 29   1 : 35 : 17 })
...
Рейтинг: 0 / 0
Генератор скрипта на создание таблицы
    #35512695
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, раз пошла такая пьянка, то вот что еще можно сделать:
LUCIAN
ZN=&NPL

замени на
Код: plaintext
ZN=Evaluate(NPL)
а во все trans(month(ZN)), кроме года, добавь второй параметр
Код: plaintext
trans(month(ZN), '@L 99')
Для времени лучше использовать ttoc(,2)
...
Рейтинг: 0 / 0
Генератор скрипта на создание таблицы
    #35512758
LUCIAN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Sizov. Ну, раз пошла такая пьянка, то вот что еще можно сделать:
Спасибо, я учту твои замечания может ещё поступят предложения...
...
Рейтинг: 0 / 0
Генератор скрипта на создание таблицы
    #35512773
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LUCIAN Sergey Sizov. Ну, раз пошла такая пьянка, то вот что еще можно сделать:
Спасибо, я учту твои замечания может ещё поступят предложения...
Их есть у меня! Убери всефункции низкоуровнего доступа к файлам и собирать все в переменную и одним махом через strtofile() выкинуть ее в файл.
...
Рейтинг: 0 / 0
Генератор скрипта на создание таблицы
    #35512819
12345зайчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
+ объяви по-человечьи переменные
...
Рейтинг: 0 / 0
Генератор скрипта на создание таблицы
    #35512867
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
12345зайчик+ объяви по-человечьи переменные
Алексанр, боюсь что это невыполнимое пжелание. :) Это давняя привычка еще со времен ЕС, СМ и т.п.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Генератор скрипта на создание таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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