powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / И снова SQL запрос.
10 сообщений из 10, страница 1 из 1
И снова SQL запрос.
    #38646373
X_quazar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!!!

SELECT * FROM table1 WHERE (UPPER(&fild)=word) INTO CURSOR temptable1 NOFILTER READWRITE
thisform.grid1.RecordSource='temptable1'

Значения fild (поле) word (значение записи) берутся из TextBoxов.

Запрос выполняется идеально и результат верный, но только в тех случаях, когда тип задаваемого поля (fild)
определён как character в table1.DBF. В других случаях (тип поля numeric, data...) при формировании запроса
выдаётся ошибка "Function argument value, type or count is invalid"

Можно ли программно что-нибудь сделать, чтобы запрос выполнился и была возвращена таблица с результатом, не
вмешиваясь во внутреннюю целостность данных исходной таблицы?

Заранее спасибо!
...
Рейтинг: 0 / 0
И снова SQL запрос.
    #38646465
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X_quazar,

Можно. Значение переменной word из символьного переводить в числовое, если поле таблицы является таковым.
...
Рейтинг: 0 / 0
И снова SQL запрос.
    #38646485
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для несимвольных убери UPPER(), т.к. UPPER() принимает только символьные параметры
...
Рейтинг: 0 / 0
И снова SQL запрос.
    #38646491
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у тебя fild это имя поля, то пиши так
Код: sql
1.
2.
3.
4.
5.
field = 'my_field' && у тебя это уже есть
if type(field) = 'C'
   field = 'upper(' + field + ')'
endif
SELECT * FROM table1 WHERE (&field=word) INTO CURSOR temptable1 NOFILTER READWRITE
...
Рейтинг: 0 / 0
И снова SQL запрос.
    #38646493
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и не помешает проверка типа word
Код: sql
1.
2.
3.
if type(field) != type('word')
   ? 'Несовпадение типов ' + type(field) + '!=' + type('word')
endif
...
Рейтинг: 0 / 0
И снова SQL запрос.
    #38646531
X_quazar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А возможно ли как-нибудь преобразовать тип word в тип fild, если type(field) != type('word')?
Или хотя бы вручную преобразовывать тип word под тип fild, скажем, если type(field) = 'N', преобразовать
word в число???
...
Рейтинг: 0 / 0
И снова SQL запрос.
    #38646550
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X_quazarА возможно ли как-нибудь преобразовать тип word в тип fild, если type(field) != type('word')?
Или хотя бы вручную преобразовывать тип word под тип fild, скажем, если type(field) = 'N', преобразовать
word в число???
Возможно
Код: sql
1.
2.
3.
if type(field) = 'N' and type('word') = 'С'
   word =  val(word)
endif


подобным образом для всех остальных типов прописать.
...
Рейтинг: 0 / 0
И снова SQL запрос.
    #38646582
SoftwareBoy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IgorNGX_quazar,

Можно. Значение переменной word из символьного переводить в числовое, если поле таблицы является таковым.
Только надо помнить, что результат VAL() зависит от соответствия SET POINT тому символу, который введён в строке перед дробной частью.
Для даты результат преобразования из строки зависит от SET DATE.
Для логических полей - надо проверять все варианты написания true/false, yes/no, да/нет.

Dima Tif type(field) = 'C'
Memo-поля тоже как бы символьные, так что как минимум
Код: sql
1.
if INLIST(type(field) ,'C','M')
...
Рейтинг: 0 / 0
И снова SQL запрос.
    #38646626
X_quazar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Оказывается, дела обстоят совсем по другому, нежели я описал вначале.

Опишу более подробно процесс формирования word и fild.

Значение fild берётся из combobox, источник данных для которого - одномерный массив [1, n], состоящий из
полей текущей таблицы и создаваемый функцией AFIELDS. С fild как раз таки проблем нет, я выбирал в combobox
поля, определённые разными типами в исходном DFB-файле, и выводил их тип. При любом раскладе он оказывался символьным.

Значение word берётся из textbox, вводится вручную. Тут с типами оказалось всё посложнее. Такое ощущение, что фокс сам
определяет тип вводимых данных. Когда я в textbox ввожу цифры, тип word отображается как числовой, пока не введу какой-либо символ. Тогда отображается как символьный.

Возможно ли как-нибудь программно преобразовывать word в символьный тип?

Я пытался делать следующее:
IF type(word)= 'N'
word=str(word)
? type(word)
ENDIF
не помогает, выдаёт ту же ошибку "Function argument value, type or count is invalid", напротив строки word=str(word)
...
Рейтинг: 0 / 0
И снова SQL запрос.
    #38646629
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X_quazarЯ пытался делать следующее:
IF type(word)= 'N'
word=str(word)
? type(word)
ENDIF
не помогает, выдаёт ту же ошибку "Function argument value, type or count is invalid", напротив строки word=str(word)
надо word в кавычках
Код: sql
1.
IF type('word')= 'N'
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / И снова SQL запрос.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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