1

我目前正在尝试将几千条记录从 MULTIKEYED 文件传输到一个平面 STRING 文件,即构建一个大型 SQL INSERT 语句以从我们的服务器 FILE 基础系统中取出数据以插入 SQL Server 进行测试。

我已经用一个非常相似的程序成功地完成了其他一些文件,但是这个一直产生错误 31 工作区溢出,我尝试缩短字符串的长度、数组和过滤文件,所以我只得到记录晚于 2012 年 2 月 15 日的日期

这是来自 BBx 的在线帮助中关于错误 31 的片段:

!ERROR=31 - 工作区内存溢出 有关 BBj 特定的信息,请参阅 BBj 中的 !ERROR 更改。

工作区内存不足。使用 START 动词分配更大的工作空间可以更正此错误。

• 尝试对大字符串或数组进行标注。

• 试图加载一个大程序。

• 试图操作大字符串。

• 试图读取或写入大记录。

• 试图编辑会导致程序变得比可用内存大的程序。

• 试图使程序长于允许的时间,即使有足够的内存。

• 试图输入编译长度大于 256 字节的控制台模式命令。

我相当有信心我不会违反任何这些条件

有任何想法吗?

0001 STRING "/u/x/scc/scott.sql"
0002 OPEN (1)"/u/x/scc/scott.sql"
0004 LET ARRAYLEN=27
0005 DIM A$[1:ARRAYLEN]
0010 OPEN (2)"V1OEMF"
0015 LET K$=""; READ (2,KEY=K$,DOM=0016)
0020 LET K$=KEY(2,END=15000)
0030 READ (2,KEY=K$)A$[ALL]
0035 FOR I=1 TO ARRAYLEN STEP 1; IF A$[I]="" THEN LET A$[I]=".."; NEXT I
0036 FOR I=1 TO ARRAYLEN STEP 1
0039 IF POS("'"=A$[I])<>0 THEN LET A$[I](POS("'"=A$[I]),1)=" "; GOTO 0039
0040 NEXT I
0050 IF A$[14]<"B20215" THEN GOTO 0020
0080 PRINT "INSERT INTO WMS.dbo.V1OEMF VALUES ('"+A$[1]+"','"+A$[2]+"','"+A$[4
0080:]+"','"+A$[5]+"','"+A$[6]+"','"+A$[7]+"','"+A$[8]+"','"+A$[9]+"','"+A$[12
0080:]+"','"+A$[14]+"','"+A$[25]+"','"+A$[27]+"');"
0100 GOTO 0020
15000 CLOSE (1); CLOSE (2)
4

2 回答 2

1

将on line 35 移动到它自己的行,如果语句为 false Next I,它不会被执行IF

于 2012-03-12T18:57:45.247 回答
0

对我来说,您应该打印到通道 (1) 您需要的字符串文件。您现在拥有它的方式将简单地打印到屏幕上并快速填满内存。尝试将第 80 行更改为 Print (1).....等等...

于 2012-03-13T16:35:43.607 回答