Получение ошибки 31 в BBx (Business Basic) - PullRequest
1 голос
/ 21 февраля 2012

В настоящее время я пытаюсь перенести несколько тысяч записей из файла MULTIKEYED в плоский файл STRING, который строит большой оператор SQL INSERT для извлечения данных из наших систем баз данных FILE для вставки в SQL Server для тестирования. .

Я успешно сделал это с несколькими другими файлами с очень похожей программой, но этот продолжает вызывать переполнение рабочей области ошибки 31. Я попытался сократить длину строки, массива и фильтрации по файлу, поэтому я только получить записи с датой не позднее 15 февраля 2012

Вот фрагмент интерактивной справки от BBx об ошибке 31:

! ERROR = 31 - переполнение памяти рабочей области Для информации, специфичной для BBj, см.! ERROR Изменения в 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)

Ответы [ 2 ]

1 голос
/ 12 марта 2012

Перемещение Next I в строке 35 на собственную строку не выполняется, если оператор IF равен false

0 голосов
/ 13 марта 2012

мне вы должны печатать на канал (1) нужный вам строковый файл. Теперь у вас есть возможность просто напечатать на экране и заполнить память очень быстро. Попробуйте изменить строку 80 на Print (1) ..... и т.д ...

...