Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как избежать сообщения "SQL Out of Memory"? / 16 сообщений из 16, страница 1 из 1
08.09.2004, 11:25
    #32684855
nnnnnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как избежать сообщения "SQL Out of Memory"?
В программе есть запрос
Код: 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
08.09.2004, 11:46
    #32684907
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как избежать сообщения "SQL Out of Memory"?
может так
if !empty(variable2)
select field1 from table1 into cursor aaaa where field2 = variable2
endif
...
Рейтинг: 0 / 0
08.09.2004, 11:52
    #32684928
nnnnnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как избежать сообщения "SQL Out of Memory"?
leafможет так
if !empty(variable2)
select field1 from table1 into cursor aaaa where field2 = variable2
endif
Обработка должна выполняться при условии, что таблице нет записи с значением variable2 в поле field2 или значение variable2 пустое.

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

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

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
08.09.2004, 12:10
    #32685001
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как избежать сообщения "SQL Out of Memory"?
TAG~s
1.!empty(variable2) - это не означает что значение не .null. , это значит что
значение или 0 или "".
В FP2.6 значения типа NULL вообще не существовало. Введено только с версии VFP3
...
Рейтинг: 0 / 0
08.09.2004, 12:12
    #32685004
nnnnnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как избежать сообщения "SQL Out of Memory"?
ВладимирМЕсли есть индекс по полю Field2, то вместо LOCATE можно использовать SEEK()
А SEEK или LOCATE нормально будет работать внутри SCAN?
...
Рейтинг: 0 / 0
08.09.2004, 12:15
    #32685012
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как избежать сообщения "SQL Out of Memory"?
я извеняюсь просто ответил по инерции
как в вопросе так и в ответе
конечно locate
...
Рейтинг: 0 / 0
08.09.2004, 12:17
    #32685019
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как избежать сообщения "SQL Out of Memory"?
а вообще изложите полностью такое впечатление что у вас там есть еще один массив от которого нужно избавиться
...
Рейтинг: 0 / 0
08.09.2004, 12:21
    #32685033
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как избежать сообщения "SQL Out of Memory"?
Работать-то будут нормально, но возникнет проблема с позиционированием указателя записи, если 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
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как избежать сообщения "SQL Out of Memory"? / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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