Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Добавление записей в дочерние таблицы / 22 сообщений из 22, страница 1 из 1
17.12.2007, 20:12
    #35015945
lihach
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей в дочерние таблицы
Ну,друзья однополчане,поможайте!
Нужен код на кнопку которая будет действовать как кнопка Add из созданных мастером(txtbtns из wizbtns),но чтобы она добавляла записи не только в родительскую,но и дочерние таблицы.
Ситуация вот в чём состоит:одна форма на ней pageframe с 2-мя закладками.На первой textbox'ы из родительской таблицы,на второй из дочерней.Кинул на нах эти самые кнопки(Первая,последняя,печать,добавить),так вот,при нажатии на Add можно вводить только в textbox'ы родительской,а вот в дочерние почему-то нельзя.
Как сделать так,чтобы можно было?
...
Рейтинг: 0 / 0
18.12.2007, 15:26
    #35017914
student_lviv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей в дочерние таблицы
Используй Insert into для каждой таблицы. Значение ключевого поля задавай сам для каждой таблицы.
...
Рейтинг: 0 / 0
23.12.2007, 15:18
    #35028457
lihach
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей в дочерние таблицы
Ключевое поле у меня marka(как в table1 оно там primary,так и в Table2 regular).Так вот,при записи в textbox'ы одинаковых значений в этого поля появляется ошибка,как я смотрю в этом форуме многим знакомая(uniqueness of index marka is violated),но путёвого ответа ДЛЯ СЕБЯ я не отыскал.

так открываю box'ы для добавления:
thisform.pageframe1.page1.vvSteelsname.Visible= .T.
thisform.pageframe1.page1.vvSteeltip.Visible= .T.
thisform.pageframe1.page1.vvPrimen.Visible= .T.
thisform.pageframe1.page2.vvDopolnname.Visible= .T.
thisform.vvod.Visible= .T.
thisform.ochist.Visible= .F.

вот так записи добавляю:
Insert Into osnown(marka,tip,nasnachenie) Values(thisform.pageframe1.page1.vvSteelsname.Value,thisform.pageframe1.page1.vvSteeltip.Value,thisform.pageframe1.page1.vvPrimen.Value)
INSERT INTO dopoln(marka) values(thisform.pageframe1.page2.vvDopolnname.Value)
thisform.pageframe1.page1.vvSteelsname.Value=""
thisform.pageframe1.page1.vvSteelsname .Visible= .F.
thisform.pageframe1.page1.vvSteeltip.Value=""
thisform.pageframe1.page1.vvSteeltip.Visible= .F.
thisform.pageframe1.page1.vvPrimen.Value=""
thisform.pageframe1.page1.vvPrimen.Visible= .F.
thisform.pageframe1.page2.vvDopolnname.Value=""
thisform.pageframe1.page2.vvDopolnname.Visible= .F.
thisform.vvod.Visible= .F.
thisform.ochist.Visible= .T.
...
Рейтинг: 0 / 0
23.12.2007, 15:45
    #35028472
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей в дочерние таблицы
lihach... ошибка,как я смотрю в этом форуме многим знакомая(uniqueness of index marka is violated),но путёвого ответа ДЛЯ СЕБЯ я не отыскал.

А F1 пробовал нажимать:
HELPThe uniqueness of primary or candidate key is violated.
Fix the record values or revert them.

У тебя в таблице есть индекс созданный как PRIMARY KEY, который не допускает двух одинаковых значений в индексном выражении. А ты пытаешься добавить уже существующее. Вероятно в insert`е ты это поле не указал, поэтому в первый раз вставился 0, во второй раз 0 поставить нельзя т.к. он уже есть.
Если VFP7 и выше то для поля ключа поставь тип Integer (Autoinc)
если VFP6 и ниже то пиши туда RECNO() для курсового достаточно. В рабочих прогах лучше RECNO() не использовать в качестве ключа

PS Рекомендую еще почитать про свойство ControlSource у текстбокса и буферизацию таблиц.
...
Рейтинг: 0 / 0
23.12.2007, 17:34
    #35028534
lihach
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей в дочерние таблицы
Честно говоря из поста ничего не понял...у меня 2 таблицы,и в каждой есть поле марка,я добавляю новое название марки которого нету ни как в первой,так и во второй таблице...я вроде как всё указал(прочтите прошлый мой пост)...
Где тут конкретный совет???Или может я торомоз?
...
Рейтинг: 0 / 0
23.12.2007, 17:49
    #35028547
lihach
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей в дочерние таблицы
обнаружилась фишка!
Действительно,там такая запись уже была...
Вот как это получилось:я её добавил(для эксперимента),потом удалил с помощью кнопки,которую я сделал сам,потом закрыл лису,ушёл есть,пришёл,запустил лису,попытался добавить такую же,не получилось.
Посмотрел сейчас таблицы в browse,оказалось ничего не удалилось.Почему?Вот код кнопки удаления:
SET DELETED ON
DELETE in dopoln
DELETE IN osnown
SKIP -1 IN osnown
SKIP -1 IN dopoln
thisform.Refresh()
Я не спец,может чё напутал...
...
Рейтинг: 0 / 0
23.12.2007, 18:16
    #35028565
lihach
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей в дочерние таблицы
причем если я работаю с одной таблицей всё отлично,а как начинаю добавлять во вторую,так начинается.
Добавляю в первую запись qqq и во вторую qqq(она у меня типа 2 -ой становиться,т.к. одна у меня там уже есть),потом www добавляю.Смотрю в browse на таблицы...2 запись в первой qqq,вторая запись во второй www...хотя на форме все правильно перебирает...
Вот аткой кошмар!
...
Рейтинг: 0 / 0
23.12.2007, 20:07
    #35028661
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей в дочерние таблицы
lihachобнаружилась фишка!
Действительно,там такая запись уже была...
Вот как это получилось:я её добавил(для эксперимента),потом удалил с помощью кнопки,которую я сделал сам,потом закрыл лису,ушёл есть,пришёл,запустил лису,попытался добавить такую же,не получилось... В фоксе помеченные на удаление записи тоже проверяются при добавлении/изменении первичного ключа. Т.к. в любой момент может появиться SET DELETED OFF. Поэтому удобней использовать счетчик в качестве ключа, тогда таких проблем не возникает.

lihachпричем если я работаю с одной таблицей всё отлично,а как начинаю добавлять во вторую,так начинается.
Добавляю в первую запись qqq и во вторую qqq(она у меня типа 2 -ой становиться,т.к. одна у меня там уже есть),потом www добавляю.Смотрю в browse на таблицы...2 запись в первой qqq,вторая запись во второй www...хотя на форме все правильно перебирает...
Вот аткой кошмар!
Ничего не понятно. Попробуй сначала очистить таблицы:
Код: plaintext
1.
2.
3.
4.
5.
close data all
use osnown excl
zap
use dopoln excl
zap
use
...
Рейтинг: 0 / 0
24.12.2007, 10:19
    #35029254
lihach
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей в дочерние таблицы
дело вот в чём:записи в таблицу 1 добавляются как надо(в просмотре browse),а в таблице 2 в обратном порядке...
table1
www
qqq
sss

table2
sss
qqq
www

это если смотреть не выходя из фокса....а форма переберает их правильно,ну,наверное потому что она их определяет по индексам...
а если выйти и опять посмотреть в browse ,то там всё приходит на свои места...

table1
www
qqq
sss

table2
www
qqq
sss
кому интересно,вот весь архив,находящийся в разработке...
...
Рейтинг: 0 / 0
25.12.2007, 14:45
    #35032659
lihach
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей в дочерние таблицы
Что-то други меня совсем оставили...Может архив не открывается?
...
Рейтинг: 0 / 0
25.12.2007, 15:10
    #35032783
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей в дочерние таблицы
lihachЧто-то други меня совсем оставили...Может архив не открывается?
Открывается, только понятней от этого не становится.
По большому счету не важно в какой последовательности идут записи, т.к. у тебя связка таблиц по SET RELATION и в подчиненной (dopoln) используется индекс (MARKA)
Если идет перемещение по osnown, то в dopoln фокс сам устанавливает указатель на запись где dopoln.marka = osnown.marka, или в конец dopoln если такого значения dopoln.marka нет
...
Рейтинг: 0 / 0
25.12.2007, 15:18
    #35032839
lihach
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей в дочерние таблицы
Вот и я говорю....может поэтому и кнопка удаления не работает???
Может он не понимает чего ему удалять?
А так какой вердикт?Добавление-то я правильно сделал?Надо же у специалистов проконсультироваться...
...
Рейтинг: 0 / 0
25.12.2007, 15:29
    #35032893
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей в дочерние таблицы
lihachВот и я говорю....может поэтому и кнопка удаления не работает???
Может он не понимает чего ему удалять?
Удаление правильно, только замени
Код: plaintext
thisform.Refresh() 
на
Код: plaintext
ThisForm.nextsteel.Click()
т.к. после удаления указатель остается на удаленной записи даже при SET DELETED ON
и PACK убери.
thisform.Refresh() не поможет, т.к. контролы у тебя показывают переданные им значения, а не содержимое записей таблиц.
lihachА так какой вердикт?Добавление-то я правильно сделал?Надо же у специалистов проконсультироваться... Вердикт - порнография полная.
...
Рейтинг: 0 / 0
25.12.2007, 15:51
    #35032986
lihach
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей в дочерние таблицы
Что ж так грубо то!Я сегодня первый день!Я пришёл тут так и было!
Работает же....коряво конечно...а что не проффесионального...только конкретно(так в 2-х словах,если не трудно,общие тезисы).
И как быть без pack опять же?Записи то после запуска следующего не появятся обратно?Да + когда я захочу такую же запись,как помечена на удаление добавить,он мне не выдаст про уникальность???
...
Рейтинг: 0 / 0
25.12.2007, 15:59
    #35033017
Dag
Dag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей в дочерние таблицы
Чой-то марки стали у тебя какие-то неприличные. Сюда же дети заходят....

Напрасно употребляешь команду pack в коде кнопки удаления. И сильно навороченный код в триггере таблицы osnown - он вообще тебе нужен?
...
Рейтинг: 0 / 0
25.12.2007, 16:08
    #35033059
lihach
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей в дочерние таблицы
Простите за марки...мне так стыдно,просто ночью делал и так достало уже!!!!Что вот-результат...
Прошлого не вернуть...а триггер не я делал,он сам появился.(только если ненароком получилось)
Что такое триггер в теории только знаю и писать их пока не умею.
И опять же про pack...
Сделал удаление как советовали,пару записей удалил,остается в таблице 2 записи,одну удаляешь,а она на форме так и остается.....надо додумать....
...
Рейтинг: 0 / 0
25.12.2007, 16:10
    #35033073
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей в дочерние таблицы
lihachЧто ж так грубо то!Я сегодня первый день!Я пришёл тут так и было!
Работает же....коряво конечно...а что не проффесионального...только конкретно(так в 2-х словах,если не трудно,общие тезисы). Все.
Что оценивать, если у тебя пара десятков строк кода и те состоят в основном из смены Visible да Enabled? А ты не можешь разобраться с работой нескольких строк выполняющих работу с данными?
Enabled Фокс сам из менять может без единой строки кода.
Это еще как-то может сканать на три в вузе, где программирование не является профильным предметом.
lihachИ как быть без pack опять же?Записи то после запуска следующего не появятся обратно?Да + когда я захочу такую же запись,как помечена на удаление добавить,он мне не выдаст про уникальность??? Не хочу объяснять где что прописывать и инструкцию прикладывать к каждой строке кода. Для этого книги есть. Похожие вещи там разжевываются по самые нехочу. Возьми и почитай.
...
Рейтинг: 0 / 0
25.12.2007, 16:11
    #35033080
lihach
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей в дочерние таблицы
и что я говорил!!!вышел из fox'а,опять зашел,а саписи тут как тут(помеченные на удаление).
Кстати на одной из тем форума,что то такое обсуждалось...но даже если сделать так,что записи помеченные на удаление просматриваться не будут(я,кстати,не знаю как,видимо, не дорос ещё),то это же не приемлимо!Размер файла будет расти до бесконечности....да ещё добавление таких же....ну в общем....надо рациональное решение
...
Рейтинг: 0 / 0
25.12.2007, 16:18
    #35033106
lihach
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей в дочерние таблицы
Что ж,спасибо за конструктивный ответ....пойду в книгах покопаюсь.
А я то думал:зачем форум нужен?Чтоб там на библиотеку указали,вот зачем.
...
Рейтинг: 0 / 0
25.12.2007, 16:23
    #35033137
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей в дочерние таблицы
lihachи что я говорил!!!вышел из fox'а,опять зашел,а саписи тут как тут(помеченные на удаление).
Кстати на одной из тем форума,что то такое обсуждалось...но даже если сделать так,что записи помеченные на удаление просматриваться не будут(я,кстати,не знаю как,видимо, не дорос ещё),то это же не приемлимо!Размер файла будет расти до бесконечности....да ещё добавление таких же....ну в общем....надо рациональное решение Операции требующие монопольного захвата таблиц (PACK, INDEX) обычно выделяют в отдельный блок, который выполняется по мере необходимости (я делаю при первом запуске в день обычно), но ни как не после каждой операции DELETE

PS Иди за книжкой там все это описано.
...
Рейтинг: 0 / 0
25.12.2007, 16:24
    #35033146
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей в дочерние таблицы
lihachЧто ж,спасибо за конструктивный ответ....пойду в книгах покопаюсь.
А я то думал:зачем форум нужен?Чтоб там на библиотеку указали,вот зачем. Форум нужен чтобы проблемы решать которые в книжках не описаны, а не для он-лайн лекций.
...
Рейтинг: 0 / 0
25.12.2007, 16:26
    #35033159
lihach
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление записей в дочерние таблицы
Да я уж догнал что при запуске делать надо этот pack......
Удаляюсь,всем спасибо,удачи,любви и терпенья.....
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Добавление записей в дочерние таблицы / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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