powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Добавление/удаление. Не могу разобраться((
22 сообщений из 22, страница 1 из 1
Добавление/удаление. Не могу разобраться((
    #36006505
Jayden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вобщем походил по форуму и в итоге всё равно не разобрался((( (т.к. нуб пока ещё наиполнейший)
Короч есть база состоящая из 5 таблиц. Есть форма, на которой расположены несколько комбобоксов (источники - это поля четырёх таблиц), пару текстбоксов. Есть кнопка "добавить"
Так вот, заполняем текстбоксы, выбираем значения в комбобоксах. А вот какой код прописать в кнопке добавить я не знаю. причём значения из комбобоксов и текст боксов должны записываться в определённые поля пятой таблицы.(как это зделать тоже непонимаю) Вот собсно всё. Прошу помощи.
...
Рейтинг: 0 / 0
Добавление/удаление. Не могу разобраться((
    #36006644
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код для кнопки добавить
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
*вставить новую запись в 5ю таблицу (пусть будет table5 с полями field1...field5)
appe blan in table5
* заполнить ее значениями контролов
replace field1 with ThisForm.combo1.Value, ;
 field1 with ThisForm.combo1.Value,;
 field2 with ThisForm.combo2.Value,;
 field3 with ThisForm.combo3.Value,;
 field4 with ThisForm.textbox1.Value,;
 field5 with ThisForm.textbox2.Value,;
IN table5
...
Рейтинг: 0 / 0
Добавление/удаление. Не могу разобраться((
    #36006647
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
*вставить новую запись в 5ю таблицу (пусть будет table5 с полями field1...field5)
appe blan in table5
* заполнить ее значениями контролов
replace field1 with ThisForm.combo1.Value, ;
 field1 with ThisForm.combo1.Value,;
 field2 with ThisForm.combo2.Value,;
 field3 with ThisForm.combo3.Value,;
 field4 with ThisForm.textbox1.Value,;
 field5 with ThisForm.textbox2.Value ;
IN table5
...
Рейтинг: 0 / 0
Добавление/удаление. Не могу разобраться((
    #36006711
Jayden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dag, спс, вроде всё норм. Но вот щас при нажатии "добавить" выдаёт ошибку: "Нарушена уникальность индекса 'мой индекс' ". Это я так понимаю уже из другой серии. В RI везде стоит Ignore.

Зы: я пробывал ещё к кнопке добавить применить вот это: INSERT INTO brigada (nomer_brigadi,burovik,pomosnik,burovay,nachalnik) VALUES (Thisform.text1.value,Thisform.text2.value,Thisform.text3.value,Thisform.Combo2.value,Thisform.Combo1.value)

Вроде тож всё нормально, но вот выдаёт ошибку об несовпадении типа данных. эт я понял, что в текстбоксе инфа в текстовом формате, а у меня одно поле интежер. Как из Thisform.text1.value сделать чтобы переводилось в числа?
...
Рейтинг: 0 / 0
Добавление/удаление. Не могу разобраться((
    #36007069
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>Вроде тож всё нормально, но вот выдаёт ошибку об несовпадении типа данных. эт я понял, что в текстбоксе инфа в текстовом формате, а у меня одно поле интежер. Как из Thisform.text1.value сделать чтобы переводилось в числа?

Какое соответствие между текстовым значением и числовым?
...
Рейтинг: 0 / 0
Добавление/удаление. Не могу разобраться((
    #36007453
Burn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaydenDag, спс, вроде всё норм. Но вот щас при нажатии "добавить" выдаёт ошибку: "Нарушена уникальность индекса 'мой индекс' ". Это я так понимаю уже из другой серии. В RI везде стоит Ignore.
Какой тип индекса? Primary или Candidate требуют чтобы индексное выражение было уникальным. ПРи этом следует учитывать и удаленые записи.

JaydenВроде тож всё нормально, но вот выдаёт ошибку об несовпадении типа данных. эт я понял, что в текстбоксе инфа в текстовом формате, а у меня одно поле интежер. Как из Thisform.text1.value сделать чтобы переводилось в числа?
lnField=Val(Thisform.text1.value)
...
Рейтинг: 0 / 0
Добавление/удаление. Не могу разобраться((
    #36008142
Jayden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем большое спасибо, всё работает))
Но вопросы один за другим прут((( Щас вот немогу додуматься как зделать, чтобы при запуске формы, текстбох принимал значение равное: число из последней записи поля1 таблицы1 + 1. Т.е. например в поле1 последняя запись 9, то как зделать, чтобы при запуске формы, текстбокс считал эту цифру и прибавил еденицу, т.е. принял значение 10?
...
Рейтинг: 0 / 0
Добавление/удаление. Не могу разобраться((
    #36008230
pitermax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nid=max(id)
nid=m.nid+1
thisform.text1.value=nid
...
Рейтинг: 0 / 0
Добавление/удаление. Не могу разобраться((
    #36008464
karly™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это все неправильно :)

1. Для того, чтобы данные из текстбоксов и комбо были привязаны к полям таблиц(ы), используется свойство ControlSource. Тогда изменения в текстбоксе и комбо будут сразу сохраняться в полях, без Replace.

2. Чтобы изменения сохранялись не сразу, а пользователь мог их отменить, используется буферизация и функции TableUpdate() и TableRevert()

3. Для поддержания уникальности кода и наращивания значения ключевого поля для новой записи используется свойство поля DefaultValue и функция NewID( ) . Пример такой функции - http://forum.foxclub.ru/read.php?29,333336,333356#msg-333356
...
Рейтинг: 0 / 0
Добавление/удаление. Не могу разобраться((
    #36008612
Jayden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
karly™, я понимаю, что всё делаю по принцыпу "лишьбы-лишьбы"...но к сожалению катастрофически нехватает времени. Курсач скоро здавать. Вот после, не торопяс начну конкретно заседать.
ЗЫ: И ещё вопрос: как сюда воткнуть проверку на заполнение полей? (т.е. если хотя бы один текстбокс или комбобокс пустой, выдать ошибку и запретить добавление, пока не будет всё заполнено) ?

Вот код:

appe blan in brigada
replace nachalnik with (ThisForm.combo1.Value)
replace burovay with val(ThisForm.combo2.Value)
replace nomer_brigadi with val(ThisForm.text1.Value)
replace burovik with (ThisForm.text2.Value)
replace pomosnik with (ThisForm.text3.Value)
MESSAGEBOX("Бригада добавлена")

ThisForm.text1.Value=''
ThisForm.text2.Value=''
ThisForm.text3.Value=''
ThisForm.combo1.Value=''
ThisForm.combo2.Value=''
...
Рейтинг: 0 / 0
Добавление/удаление. Не могу разобраться((
    #36017697
Jayden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так и не смог понять, как запихать несколько условий в IF
Вот код кнопки, что нужно изменить? (Все текстбоксы должны быть обязательно заполнены)

IF ThisForm.text1.Value=' ' AND ThisForm.text2.Value=' ' AND ThisForm.text3.Value=' ' THEN
MESSAGEBOX("Заполните поля")
ELSE
...
...
...
...
Рейтинг: 0 / 0
Добавление/удаление. Не могу разобраться((
    #36017771
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jaydenkarly™, я понимаю, что всё делаю по принцыпу "лишьбы-лишьбы"...но к сожалению катастрофически нехватает времени. Курсач скоро здавать. Вот после, не торопяс начну конкретно заседать.
Ну, да, конечно. А с понедельника, начну делать зарядку по утрам и 10км пробежки.

Jayden
ЗЫ: И ещё вопрос: как сюда воткнуть проверку на заполнение полей? (т.е. если хотя бы один текстбокс или комбобокс пустой, выдать ошибку и запретить добавление, пока не будет всё заполнено) ?

Вот код кнопки, что нужно изменить? (Все текстбоксы должны быть обязательно заполнены)

Код: plaintext
1.
2.
3.
IF ThisForm.text1.Value=' ' AND ThisForm.text2.Value=' ' AND ThisForm.text3.Value=' ' THEN
MESSAGEBOX("Заполните поля")
ELSE
...

Для строковых данных, при настройке SET EXACT OFF (это настройка по умолчанию), сравнение идет до истечения символов в правой части выражения. Поскольку пустая строка имеет 0 символов, то в таком синтаксисе она будет равна ЛЮБОЙ символьной строке. Если указывается один символ пробела, то он будет равен любой строке, начинающейся с пробела.

Сравнение на пустоту, лучше выполнять при помощи специальной функции EMPTY()

Код: plaintext
1.
2.
3.
IF EMPTY(ThisForm.text1.Value) AND EMPTY(ThisForm.text2.Value) AND EMPTY(ThisForm.text3.Value) THEN
MESSAGEBOX("Заполните поля")
ELSE
...

Разумеется, есть и другие варианты, но через EMPTY() - самый простой, в данном случае.
...
Рейтинг: 0 / 0
Добавление/удаление. Не могу разобраться((
    #36017773
Jayden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ , большое спасибо за помощь.
ВладимирМ
Ну, да, конечно. А с понедельника, начну делать зарядку по утрам и 10км пробежки.


Нет, действительно буду разбираться, т.к. foxpro мне понадобится в будущем. Так что хочешь-нехочешь, а придётся :)
...
Рейтинг: 0 / 0
Добавление/удаление. Не могу разобраться((
    #36018602
Jayden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос по ошибке.
Есть форма, на ней combobox (значения из таблицы берутся)
В кнопке запрос (ну или как там)
При нажатии на кнопку выскакивает ошибка "Объект не содержится в FORM". При нажатии в окне ошибки "продолжить" запрос выполняется корректно и выводит результат.
Как избавиться от этой ошибки?

Вот код кнопки:

SELECT Raboti.skvagina, Raboti.brigada, Raboti.vid_raboti;
FROM ;
"база данных!raboti";
WHERE Raboti.skvagina = VAL(thisform.combo1.Value)
...
Рейтинг: 0 / 0
Добавление/удаление. Не могу разобраться((
    #36018956
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нежелательно в запросах Select-SQL использовать "многоступенчатые" ссылки. Лучше записать значение свойства в переменную и эту переменную использовать в запросе.

Код: plaintext
1.
2.
3.
4.
5.
6.
LOCAL lnValue
lnValue = VAL(thisform.combo1.Value)

SELECT Raboti.skvagina, Raboti.brigada, Raboti.vid_raboti ;
FROM "база данных!raboti" ;
WHERE Raboti.skvagina = m.lnValue
...
Рейтинг: 0 / 0
Добавление/удаление. Не могу разобраться((
    #36021689
Jayden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ, Вы опять меня выручили! Спасибо большое. Ошибка перестала выскакивать. да и вообще осталось только две ошибки: одна связаная с меню (с ней попробую ещё поразбираюсь) а вторая, так даже не ошибка, а просто я не знаю как правильно сделать.

Вобщем дело в следущем. В коде программы стоит _screen.Visible= .F. , чтобы при запуске *ехе скрывалось окно vfp. Но скрывается также результаты поиска на форме с запросами Select-SQL , (про это я спрашивал через сообщение выше)
И вот не знаю как зделать, чтобы с одной стороны _screen.Visible было false, а с другой стороны результаты поиска были видны?
...
Рейтинг: 0 / 0
Добавление/удаление. Не могу разобраться((
    #36021838
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaydenВобщем дело в следущем. В коде программы стоит _screen.Visible= .F. , чтобы при запуске *ехе скрывалось окно vfp. Но скрывается также результаты поиска на форме с запросами Select-SQL , (про это я спрашивал через сообщение выше)
И вот не знаю как зделать, чтобы с одной стороны _screen.Visible было false, а с другой стороны результаты поиска были видны?
Отобразить результат запроса в форме со свойством Form.ShowWindow = 2 - As Top-Level Form

Хотя, непонятно, чем вас _SCREEN не устраивает? Все-равно ведь будете делать "самописную" замену _SCREEN. Почему же сразу его не использовать?
...
Рейтинг: 0 / 0
Добавление/удаление. Не могу разобраться((
    #36034793
Подскажите плиз как в текущей использующийся таблице удалить записи которые повторяются
(проверять уникальность по полю L_schet N 8)
...
Рейтинг: 0 / 0
Добавление/удаление. Не могу разобраться((
    #36034857
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ХочувсезнатьПодскажите плиз как в текущей использующийся таблице удалить записи которые повторяются
(проверять уникальность по полю L_schet N 8)
Нужен еще уникальный идентификатор записи, чтобы однозначно идентифицировать каждую запись. Предположим, что у вас это поле TabId, тогда

Код: plaintext
1.
2.
3.
Delete from MyTab ;
where exists(select 'x' from MyTab tab2 ;
		where tab2.L_schet = MyTab.L_schet and tab2.TabId < MyTab.TabId)

В результате, остануться только записи, при одинаковых значениях поля L_schet имеющие минимальное значение идентификатора записи TabId

Если уникального идентификатора записи нет, то есть разные приемы, но, по сути, все они сводятся к сканированию таблицы. Пусть и через создание специфических индексов типа UNIQUE. Поищи по этому форуму. Обсуждалось не однократно.
...
Рейтинг: 0 / 0
Добавление/удаление. Не могу разобраться((
    #36035041
ВладимирМ, я только начинаю изучать фокс и многово не знаю поэтому попробую обьяснить как есть: По запросу программа открывает таблицу (каждый раз имя таблицы другое...структура одинакова)выполняется нужное действие после чего необходимо проверить записи на уникальность если такие записи в таблице уже встречаются то их надо удалять(только копии, одна должна остаться), а проверку необходимо выполнять по полю L_schet там забиты числовые значения типа 12345678. Если по запросу
SELECT L_schet FROM table_name HAVING count(L_schet)>1 GROUP BY L_schet
в курсоре можно удалять чтоб потом эти изменения перешли в таблицу?
...
Рейтинг: 0 / 0
Добавление/удаление. Не могу разобраться((
    #36035571
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. вы модифицируете существующую таблицу и необходимо убедится, что модификация не привела к созданию дубля существующей записи?

Это должно контролироваться на уровне базы данных. Т.е. самих исходных данных. Собственно, есть два способа.

1. Создать индекс типа CANDIDATE по контролируемому полю.

Такой индекс по самой своей природе не допускает появление дублей. Однако следует иметь в виду, что он будет контролировать вообще ВСЕ записи, в том числе и помеченные как удаленные. А также пустые значения.

Чтобы исключить из контроля те записи, уникальность в которых контролировать не надо в индексе Candidate добавляют FOR-условие.

Подобный индекс просто не позволит создать или изменить запись таким образом, чтобы появился дубль. Будет сообщение об ошибке о нарушении уникальности.


2. Создать триггер, который будет выполнять те же проверки. Хотя, это возможно только если вы работаете с контейнером базы данных (файлом DBC). Со свободными таблицами - не получится.

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


Все остальные способы проверки - сомнительны. Дело в том, что в случае работы в сети нескольких пользователей есть риск получить конфликт совместного доступа. Т.е. изменения вносят два пользователя.

- Первый выполнил проверку - нет дублей
- Второй выполнил проверку - нет дублей
- Первый сохранил изменения
- Второй сохраняет изменения и получает дубль данных с теми, которые ввел первый пользователь

В FoxPro for DOS это можно было обойти только наложив блокировки на таблицы. Т.е. достаточно групбый способ контроля.
...
Рейтинг: 0 / 0
Добавление/удаление. Не могу разобраться((
    #36035867
ВладимирМ,
Большое спасибо, пришлось конечно немножко почитать литературу чтоб понять как все правильно написать но в итоге все получилось.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Добавление/удаление. Не могу разобраться((
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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