powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как избежать сообщения "SQL Out of Memory"?
16 сообщений из 16, страница 1 из 1
Как избежать сообщения "SQL Out of Memory"?
    #32684855
nnnnnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В программе есть запрос
Код: plaintext
1.
2.
3.
4.
if !empty(variable2)
select field1 from table1 into array aaaa where field2 = variable2
if _tally =  0  or empty(varible2)
...endif
Как избежать сообщения "SQL Out of Memory"?
...
Рейтинг: 0 / 0
Как избежать сообщения "SQL Out of Memory"?
    #32684907
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может так
if !empty(variable2)
select field1 from table1 into cursor aaaa where field2 = variable2
endif
...
Рейтинг: 0 / 0
Как избежать сообщения "SQL Out of Memory"?
    #32684928
nnnnnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
leafможет так
if !empty(variable2)
select field1 from table1 into cursor aaaa where field2 = variable2
endif
Обработка должна выполняться при условии, что таблице нет записи с значением variable2 в поле field2 или значение variable2 пустое.

Что находится в поле field1 в принципе по барабану, надо просто узнать есть ли запись с таким значением или нет. Если убираю into array, он выдает селект при выполнении программки и останавливается...
...
Рейтинг: 0 / 0
Как избежать сообщения "SQL Out of Memory"?
    #32684944
nnnnnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, Fox 2.6
...
Рейтинг: 0 / 0
Как избежать сообщения "SQL Out of Memory"?
    #32684959
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select * from table1 into curs qq1 where p2=iif(empty(v2),0,v2)
select qq1
if reccount()>0 and !empty(v2)
endif

может как-то так
...
Рейтинг: 0 / 0
Как избежать сообщения "SQL Out of Memory"?
    #32684965
nnnnnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
leafможет так
if !empty(variable2)
select field1 from table1 into cursor aaaa where field2 = variable2
endif
Курсор будет каждый раз очищаться?
...
Рейтинг: 0 / 0
Как избежать сообщения "SQL Out of Memory"?
    #32684969
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да fox 2.6
а какая разница в данном случае?
...
Рейтинг: 0 / 0
Как избежать сообщения "SQL Out of Memory"?
    #32684975
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курсор будет каждый раз очищаться?
Вы в каком смысле
вообще в случае когда вы use в облати курсора то он исчезает
при перевыборке он пересоздаеться
...
Рейтинг: 0 / 0
Как избежать сообщения "SQL Out of Memory"?
    #32684976
nnnnnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
leaf да fox 2.6
а какая разница в данном случае?
да так, на всякий :)
спасибо
...
Рейтинг: 0 / 0
Как избежать сообщения "SQL Out of Memory"?
    #32684989
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы чего? Если стоит задача определить "существует ли хотя бы одна запись", то вообще здесь SELECT-SQL не нужен. Запрос будет выполняться по крайней мере не быстрее чем простой поиск:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
PRIVATE IsExists
IsExists = empty(variable2)
IF m.IsExists=.F.
	SELECT table1
	SET ORDER TO  0 
	LOCATE FOR field2 = variable2
	IsExists = FOUND()
ENDIF

IF m.IsExists=.F.
* переменная не задана или не нашли запись с таким значением
ENDIF

Если есть индекс по полю Field2, то вместо LOCATE можно использовать SEEK()
...
Рейтинг: 0 / 0
Как избежать сообщения "SQL Out of Memory"?
    #32684990
TAG~s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
исходный вариант

if !empty(variable2)
select field1 from table1 into array aaaa where field2 = variable2
if _tally = 0 or empty(varible2)
...endif

1.!empty(variable2) - это не означает что значение не .null. , это значит что
значение или 0 или "".

2.Кол-во выбираемых записей не должно превышать максимально допустимого
при форммировании массива.

3. А так данная структура вполне работоспособна, по крайней мере если field2
не является полем типа (МЕМО)
...
Рейтинг: 0 / 0
Как избежать сообщения "SQL Out of Memory"?
    #32685001
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TAG~s
1.!empty(variable2) - это не означает что значение не .null. , это значит что
значение или 0 или "".
В FP2.6 значения типа NULL вообще не существовало. Введено только с версии VFP3
...
Рейтинг: 0 / 0
Как избежать сообщения "SQL Out of Memory"?
    #32685004
nnnnnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМЕсли есть индекс по полю Field2, то вместо LOCATE можно использовать SEEK()
А SEEK или LOCATE нормально будет работать внутри SCAN?
...
Рейтинг: 0 / 0
Как избежать сообщения "SQL Out of Memory"?
    #32685012
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я извеняюсь просто ответил по инерции
как в вопросе так и в ответе
конечно locate
...
Рейтинг: 0 / 0
Как избежать сообщения "SQL Out of Memory"?
    #32685019
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вообще изложите полностью такое впечатление что у вас там есть еще один массив от которого нужно избавиться
...
Рейтинг: 0 / 0
Как избежать сообщения "SQL Out of Memory"?
    #32685033
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работать-то будут нормально, но возникнет проблема с позиционированием указателя записи, если SCAN выполняется по той же таблице, что и LOCATE.

В этом случае логика должна быть такая:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
PRIVATE lnRecno
SELECT Table1
SET ORDER TO  0 
SCAN
	...
	* Запоминаем текущее положение указателя
	lnRecno = RECNO()
	LOCATE ...
	...
	* Возвращаем указатель на страое место
	GO m.lnRecno
	...
ENSCAN

Но, повторюсь, такая проблема будет только если и SCAN и LOCATE по одной и той же таблице. Если есть свободные рабочие области, то можно повторно открыть ту же таблицу в другой рабочей области

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
USE table1 IN  0  AGAIN ALIAS TabFind
SELECT Table1
SET ORDER TO  0 
SCAN
	...
	* Переходим в рабочую область для поиска
	SELECT TabFind
	LOCATE ...
	...
	* Возвращаемся в исходную рабочую область
	SELECT Table1
	...
ENSCAN
USE IN TabFind
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как избежать сообщения "SQL Out of Memory"?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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