从古代BASIC转换为新数据库 [英] Converting from an ancient BASIC to new database
问题描述
(希望我正确地发布这个,否则 - 对不起!,不知道还有什么
要做的事)
我写了一套程序"许多"几年前,运行一种基本类型,称为Thoroughbred Basic,一种基本的业务。我需要重新编写它的b $ b,让它在Windows XP上运行并尖叫。这是一个
视频租赁地点,跟踪电影和游戏租赁,客户,员工
交易,预订,报告,.....等等。 />
我知道一些Visual Basic - 我现在编写VB脚本来工作。任何人都可以帮助提供建议,以便将其转换为新语言吗?对我来说最简单的可能是什么?而且,什么类型的数据库引擎最好? SQL,
访问,平面文件,我不太了解。
这不能在Windows,Linux或任何new下运行。操作系统 - 但我可以导出
所有文件和程序到DOS。他们目前正在运行20-30 286
或386台计算机 - 而不是印刷错误 - 老了!没有联网,不是必要的。
它使用的数据文件叫做Direct。和排序。我有大约90个b
程序,一些是叠加层,大多数是独立的,25-30个仅用于报告b / b
。它可以保持基于角色 - 不需要花哨的屏幕
或pix。
这是一个样本:
0010 REM" ;租赁/会员系统TOP HALF和SUBMENU"
0020 REM" PROGRAM VID-AA"
0030 REM 06/07/99
0050 BEGIN
0060 PRECISION 2
0070 SETERR 09000
0080 DIM B $(80," - "),B1 $(80 ,_,...,$(80,"<"),S $(80,");
如果FID(0)=" T0"那么
DIM B2 $(80,CHR(205))
0090 DEF FNA $(X $)= X $(1,2)+" /" + X $(3,2)+" /" + X $(5,2)
0100 DEF FNC $(X $)= X $(3,2)+" / " + X $(5,2)+" /" + X $(1,2)
0110 DEF FND $(X $)="(" + X $( 1,3)+")" + X $(4,3)+" - " + X $(7,4)
0120 DEF FNE $(X $)= X $(1,2)+ X $(4,2)+ X $(7,2)
0130 DEF FNF $(X $)= X $(5,2)+ X $( 1,4)
0140 DEF FNZ $(X $)= X $(1,POS("" = X $ +"") - 1)
0150 OPEN(6)" CONTRO"
0160 READ(6,KEY =" 001")*,N1 $,*,A0 $,A1 $,A2 $
0170 READ(6,KEY =" TODAY")Z9 $,Z8 $
0180 LET E1 $ ="" ;;
READ(6 ,KEY =" RENT" + FID(0),DOM = 00200)E1 $,T
0190 REMOVE(6,KEY =" RENT" + FID(0));
IF T<> TIM THEN
LET E1 $ =""
0200 IOLIST
M0 $(1,250 ),M(0),M(1),M(2),M(3),M(4),M(5),M(6),M(7),M(8),M(9) ),M
(10),M(11),M(12),M(13),M(14),M(15), M(16)
0210 REM" OPEN FILES"
0220 OPEN(1)" VID01"
0230 OPEN(2)" VIDST"
0240 OPEN(3)" VIN01"
0250 OPEN(4)" PHONEY"
0260 OPEN(5)VIV02
0270 OPEN(8)IDSRT
0280 OPEN(9)" VIN02"
0290 OPEN(10)" VIN03"
0300 OPEN(11)" RSVST"
0310 OPEN(12)" VINST" >
0320 OPEN(14)VIN04
0330 REM" PAINT SCREEN"
0340 LET N3 $ = FNZ $(N1 $)+ QUOT; - 会员系统
0350 LET Y $ = FNF $(FNE $(Z9 $)),Y = NUM(Y $(3,2)) - 6
0360如果Y< 1那么
LET
Y $(1,2)= STR(NUM(Y $(1,2)) - 1:00 ),Y $(3,2)= STR(NUM(Y $(3,2))+ 6:0
0)
ELSE
LET Y $(3,2)= STR(Y:" 00")
0370打印
''CS'','' SB '',@(36-INT(LEN(N3 $)/ 2),0),N3 $ '' BG '',@(0,1),B2 $ '' EG '', '' SF ''
0380 PRINT''SB'',@(0,2)," NUMBER",@(15,2)," LAST NAME",@(50 ,2),INVOICE
#,@(
0,3),评论,@(65,3),LAST
TIME",@(53,5)," HARDWARE",@(0,4),"
NAME",@(35,4)," ; DL#",@(42,5)," VCR
OWNER?",@(55,5)," MAILING?",@(6
6,5),TYPE,@(0,5),ADDRESS,@(0,6),ADDRESS,@(42,6),JOINED,
@(58,6),LAST ACTIVITY,@(0,7), ZIP,@(18,7),CARRIER
ROUTE,@(
42,7),MTD,@(51, 7),YTD,@(61,7),HOLD,@(0,8),P HONE
HM,@(24
,8),WK,@(42,8),#LT,@(50,8),#FREE,@(60,8),#M P ;,@(0,10),T
OT
$$,@(16,10),IG,@(25, 10),IM,@(34,10),IU,@(43,10),IV,
@(52,10),IX ;,@(62,10),UNPAID
FEE,''BG'',@(0,9),B2 $,@(0,11),B2 $
,''EG'',''SF''
0390 REM< IOLISTS"
0400 IOLIST
''LD'',''LD'',''LD'',''LD'',''LD'',''LD'',''LD'', ''LD'',''LD'',''LD'',''LD'',''LD'',''L
D'',''LD''
0410 REM额外设置
0420 LET M5 $ =& ## 0",M6 $ =" ####。00-",M7 $ =" ###。00-"
0430 READ(6,KEY = DUEDATE)D1 $;
LET D4 $ = D1 $,D2 $ = D1 $
0440 READ(6,KEY =" STORENUM",DOM = 00441)R8
0450 DIM Z5 $(36);
READ(6,KEY =" DZIP",DOM = 00451)Z5 $(1,9)
0460 READ(6,KEY =" DACODE",DOM = 00461)Z5 $(10,3)
0470 READ(6,KEY =" DAADDR", DOM = 00471)Z5 $(13,24)
0480 LET D5 $ = S $(1,6);
READ(6,KEY =" HANDOUT" ,DOM = 00490)D5 $,D6 $
0490 REMSOLICIT会员编号
0500 IF E1 $<> ""那么
LET E0 $ = E1 $(1,3);
IF E1 $(1,3)<> S $(1,3)那么
GOTO 00520
0510 GOSUB 02430;
IF E0 $ =""那么
GOTO 00010
0520 PRINT @(7,2),B1 $(1,6);
IF E1 $<>""那么
PRINT @(7,2),''SB'',E1 $(4,6),''SF''
0530 DIM M0 $(250 ),M(16);
LET M0 $(222,1)= STR(R8:0),M0 $(147,6)= FNE $(Z9 $)
0540 LET G $ =" **",M0 $(210,3)= E0 $(1,3)
0550 PRINT @(0,23), " F1 = ID NUMBER",@(0,22)," ENTER MEMBER#,CR = LAST
NAME,
F2 =电话搜索,F3 =下一个新客户#,F4 = END",;
INPUT(0,ERR = 00550)@(7,2),Q $,@(0,23),''CL'',@(0,22) ,''CL'',
0560如果CTL = 1那么
GOTO 01240
0570如果CTL = 2那么
GOTO 01360
0580 LET X = NUM(Q $,ERR = 00590);
如果LEN(Q $)= 7或LEN( Q $)= 10那么
LET G $ = Q $;
GOTO 01370
0590如果Q $ =" T"那么
READ(6,KEY =" TEMPNUM",DOM = 00600)P5;
LET P5 = P5 + 1,Q1 $ = STR(P5:" T00000);
READ(1,KEY = Q1 $,DOM = 00690);
WRITE(6,KEY =" TEMPNUM")P5;
GOTO 00590
0600 IF Q $ =" END"或者CTL = 4那么
GOTO 09110
0610如果CTL = 3那么
READ(6,KEY =" NXTCUS",DOM = 00620)P5;
LET P5 = P5 + 1,Q $ = STR(P5:##### 0";
WRITE(6,KEY =" NXTCUS")P5;
READ(1,KEY = Q $,DOM = 00680);
GOTO 00610
0620 IF Q $ = QUOT;" AND E1 $<>""那么
LET Q $ = E1 $(4,6);
GOTO 00710
0630如果Q $ =""那么
PRINT @(7,2),S $(1,6);
GOTO 01070
0640 FOR I = 1到LEN(Q $)
0650 IF POS(Q $(I,1)<"!")<> 0 OR POS(Q $(I,1) >" z")<> 0那么
EXITTO 00540
0660下一个我
0670如果LEN( Q $)> 6那么
GOTO 00550
0680 LET Q $ = S $(1,6-LEN(Q $))+ Q $
0690如果Q $ =T那么
LET Q $ = Q1 $
0700 PRINT @(7,2),Q $
0710 LET M0 $(1,6 )= Q $
0720 READ(1,KEY = M0 $(1,6),DOM = 01490)IOL = 00200
0730 GOSUB 00740;
GOTO 00850
0740如果M0 $(238,1)=" "那么
LET X7 $ = S $(1,7)
ELSE
LET X7 $ =" * NOF *" ;; < br $>
关闭(7);
OPEN(7)" MEMTY";
READ(7,KEY = M0 $(238,1) ,DOM = 00750)X7 $;
LET X7 $ = X7 $(2)
0750 LET X7 $ = X7 $ + S $(1,10)
0760如果M0 $(153,1)=" "那么
LET X8 $ = S $(1,11)
ELSE
LET X8 $ =" NOT ON FILE";
CLOSE(7);
OPEN(7)" VSYH";
READ(7,KEY = M0 $(153,1), DOM = 00770)X8 $;
LET X8 $ = X8 $(2)
0770 LET X5 $ = S $(1,14);
如果M0 $(112,10)<> S $(1,10)那么
LET X5 $ = FND $(M0 $(112,10))
0780 LET X6 $ = S $(1,14);
如果M0 $(122,10)<> S $(1,10)那么
LET X6 $ = FND $(M0 $(122,10))
0790如果M0 $(215,6)= S $(1,6)那么
LET X3 $ =" NONE"
ELSE
LET X3 $ = FNA $(M0 $(215,6))
(80," - "),B1
(80," _"),B2
(80,"<"),S
(Hope I''m posting this correctly, otherwise - sorry!, don''t know what else
to do)
I wrote a set of programs "many" years ago, running in a type of basic,
called "Thoroughbred Basic", a type of business basic. I need to re-write
it, bring it kicking and screaming to run on Windows XP. This is for a
video rental place, tracks movie and game rentals, customers, employee
transactions, reservations, does reports,..... and on.
I know some of Visual Basic - I now write VB scripts for work. Can anyone
help with suggestions, as to converting this to a new language? What may be
easiest for me? And, what type of database engine would be best? SQL,
Access, flat files, I don''t know enough.
This does NOT run under Windows, Linux, or any "new" OS - but I can export
all the files, and programs to DOS. They currently are running on 20-30 286
or 386 computers - not a misprint - OLD! Not networked, not neccessary.
The data files it uses are called "Direct" and "Sort". I have about 90
programs, a few are overlays, most are stand-alone, 25-30 are just for
reporting purposes. It can stay character based - no need for fancy screens
or pix.
Here is a sample:
0010 REM "RENTAL/MEMBERSHIP SYSTEM TOP HALF AND SUBMENU"
0020 REM "PROGRAM VID-AA"
0030 REM 06/07/99
0050 BEGIN
0060 PRECISION 2
0070 SETERR 09000
0080 DIM B$(80,"-"),B1$(80,"_"),B2$(80,"<"),S$(80," ");
IF FID(0)="T0" THEN
DIM B2$(80,CHR(205))
0090 DEF FNA$(X$)=X$(1,2)+"/"+X$(3,2)+"/"+X$(5,2)
0100 DEF FNC$(X$)=X$(3,2)+"/"+X$(5,2)+"/"+X$(1,2)
0110 DEF FND$(X$)="("+X$(1,3)+") "+X$(4,3)+"-"+X$(7,4)
0120 DEF FNE$(X$)=X$(1,2)+X$(4,2)+X$(7,2)
0130 DEF FNF$(X$)=X$(5,2)+X$(1,4)
0140 DEF FNZ$(X$)=X$(1,POS(" "=X$+" ")-1)
0150 OPEN (6) "CONTRO"
0160 READ (6,KEY="001") *,N1$,*,A0$,A1$,A2$
0170 READ (6,KEY="TODAY") Z9$,Z8$
0180 LET E1$="";
READ (6,KEY="RENT"+FID(0),DOM=00200) E1$,T
0190 REMOVE (6,KEY="RENT"+FID(0)) ;
IF T<>TIM THEN
LET E1$=""
0200 IOLIST
M0$(1,250),M(0),M(1),M(2),M(3),M(4),M(5),M(6),M(7) ,M(8),M(9),M
(10),M(11),M(12),M(13),M(14),M(15),M(16)
0210 REM "OPEN FILES"
0220 OPEN (1) "VID01"
0230 OPEN (2) "VIDST"
0240 OPEN (3) "VIN01"
0250 OPEN (4) "PHONEY"
0260 OPEN (5) "VIV02"
0270 OPEN (8) "IDSRT"
0280 OPEN (9) "VIN02"
0290 OPEN (10) "VIN03"
0300 OPEN (11) "RSVST"
0310 OPEN (12) "VINST"
0320 OPEN (14) "VIN04"
0330 REM "PAINT SCREEN"
0340 LET N3$=FNZ$(N1$)+" - MEMBERSHIP SYSTEM"
0350 LET Y$=FNF$(FNE$(Z9$)),Y=NUM(Y$(3,2))-6
0360 IF Y<1 THEN
LET
Y$(1,2)=STR(NUM(Y$(1,2))-1:"00"),Y$(3,2)=STR(NUM(Y$(3,2))+6:"0
0")
ELSE
LET Y$(3,2)=STR(Y:"00")
0370 PRINT
''CS'',''SB'',@(36-INT(LEN(N3$)/2),0),N3$,''BG'',@(0,1),B2$,''EG'',''SF''
0380 PRINT ''SB'',@(0,2),"NUMBER",@(15,2),"LAST NAME",@(50,2),"INVOICE
#",@(
0,3),"COMMENTS",@(65,3),"LAST
TIME",@(56,4),"HARDWARE",@(0,4),"
NAME",@(35,4),"DL#",@(42,5),"VCR
OWNER?",@(55,5),"MAILING?",@(6
6,5),"TYPE",@(0,5),"ADDRESS",@(0,6),"ADDRESS",@(42 ,6),"JOINED",
@(58,6),"LAST ACTIVITY",@(0,7),"ZIP",@(18,7),"CARRIER
ROUTE",@(
42,7),"MTD",@(51,7),"YTD",@(61,7),"HOLD",@(0,8),"P HONE
HM",@(24
,8),"WK",@(42,8),"#LT",@(50,8),"#FREE",@(60,8),"#M P",@(0,10),"T
OT
$$",@(16,10),"IG",@(25,10),"IM",@(34,10),"IU",@(43 ,10),"IV",
@(52,10),"IX",@(62,10),"UNPAID
FEE",''BG'',@(0,9),B2$,@(0,11),B2$
,''EG'',''SF''
0390 REM "IOLISTS"
0400 IOLIST
''LD'',''LD'',''LD'',''LD'',''LD'',''LD'',''LD'',''LD'',''LD'',''LD'', ''LD'',''LD'',''L
D'',''LD''
0410 REM "EXTRA SETUP"
0420 LET M5$="##0",M6$="####.00-",M7$="###.00-"
0430 READ (6,KEY="DUEDATE") D1$;
LET D4$=D1$,D2$=D1$
0440 READ (6,KEY="STORENUM",DOM=00441) R8
0450 DIM Z5$(36);
READ (6,KEY="DZIP",DOM=00451) Z5$(1,9)
0460 READ (6,KEY="DACODE",DOM=00461) Z5$(10,3)
0470 READ (6,KEY="DAADDR",DOM=00471) Z5$(13,24)
0480 LET D5$=S$(1,6);
READ (6,KEY="HANDOUT",DOM=00490) D5$,D6$
0490 REM "SOLICIT MEMBER NUMBER"
0500 IF E1$<>"" THEN
LET E0$=E1$(1,3);
IF E1$(1,3)<>S$(1,3) THEN
GOTO 00520
0510 GOSUB 02430;
IF E0$="" THEN
GOTO 00010
0520 PRINT @(7,2),B1$(1,6);
IF E1$<>"" THEN
PRINT @(7,2),''SB'',E1$(4,6),''SF''
0530 DIM M0$(250),M(16);
LET M0$(222,1)=STR(R8:"0"),M0$(147,6)=FNE$(Z9$)
0540 LET G$="**",M0$(210,3)=E0$(1,3)
0550 PRINT @(0,23),"F1=I.D. NUMBER",@(0,22),"ENTER MEMBER #, CR=LAST
NAME,
F2=PHONE SEARCH, F3=NEXT NEW CUSTOMER #, F4=END",;
INPUT (0,ERR=00550) @(7,2),Q$,@(0,23),''CL'',@(0,22),''CL'',
0560 IF CTL=1 THEN
GOTO 01240
0570 IF CTL=2 THEN
GOTO 01360
0580 LET X=NUM(Q$,ERR=00590);
IF LEN(Q$)=7 OR LEN(Q$)=10 THEN
LET G$=Q$;
GOTO 01370
0590 IF Q$="T" THEN
READ (6,KEY="TEMPNUM",DOM=00600) P5;
LET P5=P5+1,Q1$=STR(P5:"T00000");
READ (1,KEY=Q1$,DOM=00690) ;
WRITE (6,KEY="TEMPNUM") P5;
GOTO 00590
0600 IF Q$="END" OR CTL=4 THEN
GOTO 09110
0610 IF CTL=3 THEN
READ (6,KEY="NXTCUS",DOM=00620) P5;
LET P5=P5+1,Q$=STR(P5:"#####0");
WRITE (6,KEY="NXTCUS") P5;
READ (1,KEY=Q$,DOM=00680) ;
GOTO 00610
0620 IF Q$="" AND E1$<>"" THEN
LET Q$=E1$(4,6);
GOTO 00710
0630 IF Q$="" THEN
PRINT @(7,2),S$(1,6);
GOTO 01070
0640 FOR I=1 TO LEN(Q$)
0650 IF POS(Q$(I,1)<"!")<>0 OR POS(Q$(I,1)>"z")<>0 THEN
EXITTO 00540
0660 NEXT I
0670 IF LEN(Q$)>6 THEN
GOTO 00550
0680 LET Q$=S$(1,6-LEN(Q$))+Q$
0690 IF Q$="T" THEN
LET Q$=Q1$
0700 PRINT @(7,2),Q$
0710 LET M0$(1,6)=Q$
0720 READ (1,KEY=M0$(1,6),DOM=01490) IOL=00200
0730 GOSUB 00740;
GOTO 00850
0740 IF M0$(238,1)=" " THEN
LET X7$=S$(1,7)
ELSE
LET X7$="*NOF*";
CLOSE (7) ;
OPEN (7) "MEMTY";
READ (7,KEY=M0$(238,1),DOM=00750) X7$;
LET X7$=X7$(2)
0750 LET X7$=X7$+S$(1,10)
0760 IF M0$(153,1)=" " THEN
LET X8$=S$(1,11)
ELSE
LET X8$="NOT ON FILE";
CLOSE (7) ;
OPEN (7) "VSYH";
READ (7,KEY=M0$(153,1),DOM=00770) X8$;
LET X8$=X8$(2)
0770 LET X5$=S$(1,14);
IF M0$(112,10)<>S$(1,10) THEN
LET X5$=FND$(M0$(112,10))
0780 LET X6$=S$(1,14);
IF M0$(122,10)<>S$(1,10) THEN
LET X6$=FND$(M0$(122,10))
0790 IF M0$(215,6)=S$(1,6) THEN
LET X3$="NONE"
ELSE
LET X3$=FNA$(M0$(215,6))
(80,"-"),B1
(80,"_"),B2
(80,"<"),S
这篇关于从古代BASIC转换为新数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!