powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Варианты проверки ДАТЫ введённой пользователем?
17 сообщений из 17, страница 1 из 1
Варианты проверки ДАТЫ введённой пользователем?
    #36612559
DeRus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

О себе:
В VFP перешёл из Access по "нужде" недавно, поэтому хочется узнать об этом языке побольше и побыстрее.

Что имеем:
Имеется форма, на форме текстовое поле в которое должна быть введена ДАТА.
Содержымое этого поля будет позже добавленно с помощью SQL в таблицу на SQL-Server (ну это так, неважно)

Вопрос:
Какие по вашему мнению есть варианты "Защиты от дурака".
Хочется узнать самый простой способ как разрешить пользователю введение только "правильной" ДАТЫ?

Пример:
00.01.2001 = ошибка формата
вавыфавы = ошибка формата
01.01.001 = ошибка формата

В Access это решено простой устоновкой "свойства" Format в положение Datum.
В VFP установка свойства TextBox.Format = D не даёт желаемого результата!
...
Рейтинг: 0 / 0
Варианты проверки ДАТЫ введённой пользователем?
    #36612565
DeRus,
Код: plaintext
TextBox.Value = {}
...
Рейтинг: 0 / 0
Варианты проверки ДАТЫ введённой пользователем?
    #36612587
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeRus будет позже добавленно с помощью SQL в таблицу на SQL-Server (ну это так, неважно)


а почему неважно?

натяни курсор из источника, вставь пустую запись,
привяжи контролы к полям курсора

вот и будет тебе контрол, привязанный к полю-дате.

затем можно будет изм-я произвед-е в курсоре
сохранить на сервер и
автоматом сгенерить на сервер команду,
при условии использования спец.класса - курсорадаптер
(при желании и усердии).
...
Рейтинг: 0 / 0
Варианты проверки ДАТЫ введённой пользователем?
    #36612628
DeRus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходящий.DeRus,
Код: plaintext
TextBox.Value = {}


Спасибо за быстрый ответ!

Действительно помогает!
Я думаю проще этого варианта уже ничего не найти, поэтому тему можно закрывать!

То что ты предлагаешь на счёт курсора это уже "заморочки" над которыми надо немного дольше сидеть и которые приводят к такомуже результату что и первый предложенный табой вариант сделанный за 30 сек.
...
Рейтинг: 0 / 0
Варианты проверки ДАТЫ введённой пользователем?
    #36612668
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeRusТо что ты предлагаешь на счёт курсора это уже "заморочки" над которыми надо немного дольше сидеть и которые приводят к такомуже результату что и первый предложенный табой вариант сделанный за 30 сек.

ага,
покажи как будешь конструировать строку(код, выполняемый на сервере) и пихать
данные взад на сервер.

причем это будет не одна строка.
...
Рейтинг: 0 / 0
Варианты проверки ДАТЫ введённой пользователем?
    #36612685
DeRus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что то меня теперь ещё один вопросик заинтересовал...

Есть ли у кого варинты кода (ДатеПикер) ну вообщем вариант там где пользователь просто указывает на ДАТУ и она присваевается полю?
...
Рейтинг: 0 / 0
Варианты проверки ДАТЫ введённой пользователем?
    #36612689
DeRus,

поищите по слову "календарь". На сайте фоксклуба этих календарей несколько видов.
...
Рейтинг: 0 / 0
Варианты проверки ДАТЫ введённой пользователем?
    #36612710
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вариант
...
Рейтинг: 0 / 0
Варианты проверки ДАТЫ введённой пользователем?
    #36612723
DeRus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прошелмимопокажи как будешь конструировать строку(код, выполняемый на сервере) и пихать данные взад на сервер.
Установка соединения:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
PUBLIC lnSQLConn, lnAnzWhere AS LONG
PUBLIC cServer, cSQL, cWhere AS STRING
PUBLIC cMessageTitle
PUBLIC lCANCEL AS Logical

SET SYSFORMATS ON

* Variablen zuweisen **************************************************************************************
lnSQLConn =  0 
cServer = "PC-ANSC"
cMessageTitle = "Erfassung - Leistungsdaten"

STORE SQLSTRINGCONNECT('DRIVER=SQL Server;SERVER='+ALLTRIM(cServer)+';UID=produktion;PWD=adler;APP=Microsoft Visual FoxPro;DATABASE=dmihybrid;LANGUAGE=Deutsch') TO lnSQLConn
SQLSETPROP(lnSQLConn,"DispWarnings",.T.)	&& zeigt Fehlermeldungen an

THISFORM.CAPTION = cMessageTitle

* Abfragen, ob Conect erfolgreich war **********************************************************************
IF lnSQLConn <  0 
	WAIT WINDOW 'Verbindung mit SQL Server [' + cServer + '] nicht möglich!' TIMEOUT  3 
	THISFORM.RELEASE
	CANCEL
ELSE
	WAIT WINDOW 'Verbindung mit SQL Server [' + cServer + '] erfolgreich hergestellt!' TIMEOUT  2 
ENDIF

Пихание:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
* Variablen zuweisen **************************************************************************************
cSQL = ""
cWhere = ""
lnAnzWhere =  0 
lCANCEL = .F.
cPar01 = ALLTRIM(THISFORM.txtKunde_nr.VALUE)
cPar02 = ALLTRIM(THISFORM.txtKtr.VALUE)
cPar03 = "'" + ALLTRIM(THISFORM.txtDatum.VALUE) + "'"
cPar04 = ALLTRIM(THISFORM.txtFilm_nr.VALUE)
cPar05 = ALLTRIM(THISFORM.txtNorg_v.VALUE)
cPar06 = ALLTRIM(THISFORM.txtNbelegeb.VALUE)
cPar07 = ALLTRIM(THISFORM.txtNorg_ges.VALUE)
cPar08 = ALLTRIM(THISFORM.txtNRegister.VALUE)
cPar09 = ALLTRIM(THISFORM.txtNimagesb.VALUE)
cPar10 = ALLTRIM(THISFORM.txtNimages_f.VALUE)

WITH THISFORM.txtKunde_nr AS TEXTBOX
	IF LEN(cPar01) >  0   THEN
		IF lnAnzWhere >  0  THEN
			cWhere = cWhere  + " AND " + "[Kunde_nr] = " + cPar01
		ELSE
			cWhere = "[Kunde_nr] = " + cPar01
		ENDIF
		lnAnzWhere = lnAnzWhere +  1 

		.BORDERCOLOR=RGB( 0 , 0 , 0 )
	ELSE
		.BORDERCOLOR=RGB( 255 , 0 , 0 )
		lCANCEL = .T.
	ENDIF
ENDWITH

...


*Abbruch, fals nicht alle Felder erfast sind ************************************************************
IF lCANCEL = .T. THEN
	MESSAGEBOX("Bitte alle * - Pflicht/Prüffelder erfassen!", 48 ,cMessageTitle)
	CANCEL
ENDIF

* Prüfen, ob eingegebenen Daten bereits vorhanden sind ****************************************************
cSQL = "SELECT COUNT(*) as SQLAnz FROM t_ld_hybrid WHERE "
cSQL = cSQL + cWhere
SQLEXEC(lnSQLConn, cSQL)
IF Sqlresult.SQLAnz >  0  THEN	&& wenn vorhanden, dann ...
	MESSAGEBOX("Die Leistungsdaten sind bereits vorhanden!" +CHR( 13 )+CHR( 13 )+ cWhere, 16 ,cMessageTitle)
ELSE
	cSQL = "INSERT INTO t_ld_hybrid (Kunde_nr, Ktr, Datum, Film_nr, Norg_v, Nbelegeb, Norg_ges, NRegister, Nimagesb, Nimages_f) VALUES ("
	cSQL = cSQL + cPar01 + ", "
	cSQL = cSQL + cPar02 + ", "
	cSQL = cSQL + cPar03 + ", "
	cSQL = cSQL + cPar04 + ", "
	cSQL = cSQL + cPar05 + ", "
	cSQL = cSQL + cPar06 + ", "
	cSQL = cSQL + cPar07 + ", "
	cSQL = cSQL + cPar08 + ", "
	cSQL = cSQL + cPar09 + ", "
	cSQL = cSQL + cPar10 + ")"
	SQLEXEC(lnSQLConn, cSQL)

То что ты предлагаешь с курсором, у тебя есть кокой нибудь пример кода?
...
Рейтинг: 0 / 0
Варианты проверки ДАТЫ введённой пользователем?
    #36612833
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
cSQL = "INSERT INTO t_ld_hybrid (Kunde_nr, Ktr, Datum, Film_nr, Norg_v, Nbelegeb, Norg_ges, NRegister, Nimagesb, Nimages_f) VALUES ("
	cSQL = cSQL + cPar01 + ", "
	cSQL = cSQL + cPar02 + ", "
	cSQL = cSQL + cPar03 + ", "
	cSQL = cSQL + cPar04 + ", "
	cSQL = cSQL + cPar05 + ", "
	cSQL = cSQL + cPar06 + ", "
	cSQL = cSQL + cPar07 + ", "
	cSQL = cSQL + cPar08 + ", "
	cSQL = cSQL + cPar09 + ", "
	cSQL = cSQL + cPar10 + ")"
	SQLEXEC(lnSQLConn, cSQL)

то, что Вы показали,
я называю - "закат солнца" вручную,
причем в стиле "жесткого садомазо".

для "автоматического заката" в фокспро
разработчики придумали спец.базовый класс,
называется - курсорадаптер (поиском в данном форуме).

ищите примеры и играйтесь.
...
Рейтинг: 0 / 0
Варианты проверки ДАТЫ введённой пользователем?
    #36612879
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прошелмимо
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
cSQL = "INSERT INTO t_ld_hybrid (Kunde_nr, Ktr, Datum, Film_nr, Norg_v, Nbelegeb, Norg_ges, NRegister, Nimagesb, Nimages_f) VALUES ("
	cSQL = cSQL + cPar01 + ", "
	cSQL = cSQL + cPar02 + ", "
	cSQL = cSQL + cPar03 + ", "
	cSQL = cSQL + cPar04 + ", "
	cSQL = cSQL + cPar05 + ", "
	cSQL = cSQL + cPar06 + ", "
	cSQL = cSQL + cPar07 + ", "
	cSQL = cSQL + cPar08 + ", "
	cSQL = cSQL + cPar09 + ", "
	cSQL = cSQL + cPar10 + ")"
	SQLEXEC(lnSQLConn, cSQL)

то, что Вы показали,
я называю - "закат солнца" вручную,
причем в стиле "жесткого садомазо".

для "автоматического заката" в фокспро
разработчики придумали спец.базовый класс,
называется - курсорадаптер (поиском в данном форуме).

ищите примеры и играйтесь.
2Прошелмимо:
Не в укор вам сообщу, что высказались вы, как обычно, громко, но абсолютно не объяснили человеку преимуществ собственного подхода.

2DeRus
Господин прошелмимо имеет в виду, что при правильной настройке курсор-адаптера весь этот мегаобъем кода заменяется, по идее, всего на одну строчку:
Код: plaintext
1.
=TABLEUPDATE( 1 , .T.)

PS: В вашем коде не обрабатывается ситуация с наличием кавычек, одинарных кавычек и прочих спецсимволов в вводимых полях. Эта обработка еще на порядок увеличит размер вашего кода.
...
Рейтинг: 0 / 0
Варианты проверки ДАТЫ введённой пользователем?
    #36612889
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+ неописуемое ощущение восторга будет в случае
ввода пользователем значения для строки аля cPar09:
О'Генри

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

так, что: читайте, думайте, анализируйте.
выбор стратегии разработки за вами.
...
Рейтинг: 0 / 0
Варианты проверки ДАТЫ введённой пользователем?
    #36612900
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор2Прошелмимо:
Не в укор вам сообщу, что высказались вы, как обычно, громко, но абсолютно не объяснили человеку преимуществ собственного подхода.

успокойся,
я еще и подхода никакого не рассказал
и не объяснял ничего,
просто открыл рот и сказал: опа попа.

пусть сам грызет материал и делает свой выбор.
...
Рейтинг: 0 / 0
Варианты проверки ДАТЫ введённой пользователем?
    #36612977
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeRus, на всякий случай несколько замечаний

(1)

Когда делается настройка

Код: plaintext
TextBox.Value = {}

то это "сигнал" FoxPro о том, что содержимое данного TextBox имеет тип данных Date. Как следствие, конструкция

Код: plaintext
AllTrim(ThisForm.TextBox1.Value)

Вызовет сообщение о несовместимости типов аргументов. Функция AllTrim() ожидает значение символьного типа, а получает значение типа Date.

(2)

Существует несколько вариантов задания константы типа DateTime для MS SQL сервера. Однако универсальным является формат вида

'ГГГГММДД'

Т.е. символьная строка без разделителей, где первые 4 символа - год, следующие 2 символа - месяц и последние 2 символа - день.

В FoxPro сделать подобное преобразование даты можно двумя способами

Код: plaintext
1.
2.
?DTOS(date())
?DTOC(date(), 2 )

Другими словами, формирование строки для передачи константы даты в MS SQL примет вид

Код: plaintext
cPar03 = "'" + DTOS(THISFORM.txtDatum.VALUE) + "'"

(3)

Существует возможность не заморачиваться с трансформацией значений в символьное представление, а передать переменную FoxPro в строку команды на SQL сервер в виде параметра. Это делает при помощи символа вопросительного знака. Примерно так

Код: plaintext
1.
2.
3.
ldParDate = Date()
cSQL = "INSERT INTO t_ld_hybrid (Datum) VALUES (?m.ldParDate)
=SQLEXEC(lnSQLConn, cSQL)

Все что следует за символом вопросительного знака интепретируется как параметр, значение которого надо взять из переменных FoxPro. При этом конвертация в нужный формат произойдет автоматически. Ничего специально преобразовывать не надо.

(4)

Ну, и то, что Вам посоветовали. Вместо работы с переменными делать обновляемые представления. На основе класса CursorAdapter или Remote View. Это позволит решить часть проблем по формированию команд, отправляемых на сервер. Да и с типами данных будет проще.
...
Рейтинг: 0 / 0
Варианты проверки ДАТЫ введённой пользователем?
    #36613000
DeRus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прошелмимо[src]для "автоматического заката" в фокспро
разработчики придумали спец.базовый класс,
называется - курсорадаптер (поиском в данном форуме).

ищите примеры и играйтесь.

Значится буду искать...
Я сначало подумал что вы имеете ввиду SQL-Команду Create Cursor, а аказывается что в VFP имеется
Класс CursorAdapter:
Поддерживает обработку широкого ряда источников данных, как если бы они были родными курсорами Visual FoxPro.


Хотя мне хватит и то что я сделал!
Моим заданием было создание формы для ввода данных, формуляр будет позже добавлен к проекту. Но ради интереса думаю стоит посмотреть что вышеупомянутый класс сабой представляет.


Kruchinin PahanPS: В вашем коде не обрабатывается ситуация с наличием кавычек, одинарных кавычек и прочих спецсимволов в вводимых полях. Эта обработка еще на порядок увеличит размер вашего кода.
Что косается ковычек, то в моём случае такая проверка не нужна, так как 9 полей численного типа и 1 поле типа ДАТА
...
Рейтинг: 0 / 0
Варианты проверки ДАТЫ введённой пользователем?
    #36613046
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeRusНо ради интереса думаю стоит посмотреть что вышеупомянутый класс сабой представляет.


для поиграться (там ридми и скриптик на создание табличек).
потом при наличии вопросов и желания общаться - задать оные.
...
Рейтинг: 0 / 0
Варианты проверки ДАТЫ введённой пользователем?
    #36613264
DeRus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за ответы и примеры!
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Варианты проверки ДАТЫ введённой пользователем?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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