BBx(商业基础)中的错误 31 是什么?

发布于 2025-01-07 08:26:59 字数 1363 浏览 1 评论 0原文

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

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

以下是 BBx 在线帮助中有关错误 31 的片段:

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

工作区内存不足。使用 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)

I am currently trying to transfer a few thousand records out of a MULTIKEYED file to a flat STRING file, that is building a large SQL INSERT statement to take the data off of our servers FILE bases system to insert into SQL Server for testing.

I have successfully done this with a few other files with a very similar program, but this one keeps producing error 31 workspace overflow, I have tried shortenign the length of the string, the array, and filtering through the file so I only get records with a date newer than Feb 15 2012

here is a snippet fro mthe online help from BBx about error 31:

!ERROR=31 - Workspace Memory Overflow
For BBj-specific information, see !ERROR Changes in BBj.

Insufficient workspace memory. Allocating a larger workspace with the START verb can correct this error.

•Attempting to dimension a large string or array.

•Attempting to LOAD a large program.

•Attempting to manipulate a large string.

•Attempting to READ or WRITE a large record.

•Attempting to edit a program that would cause the program to become larger than available memory.

•Attempting to make a program longer than allowed, even if there is enough memory.

•Attempting to enter a console mode command whose compiled length is greater than 256 bytes.

I am fairly confident I am not breaking any of these conditions

any ideas?

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)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦里兽 2025-01-14 08:26:59

将第 35 行的 Next I 移动到其自己的行,如果 IF 语句为 false,则不会执行它

Moving the Next I on line 35 to its own line, it is not getting executed if the IF statement is false

失而复得 2025-01-14 08:26:59

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

to me you should be printing to channel (1) the string file you require. The way you have it now it will simply print to the screen and fill up the memory real quick. Try changing line 80 to Print (1).....etc...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文