powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите бегинеру с вставкой в связанные таблицы
17 сообщений из 17, страница 1 из 1
Помогите бегинеру с вставкой в связанные таблицы
    #32260762
realbold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пусть есть две таблицы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Table_user
___________
user_id
name
group

Table_salary
___________
sal_id
dayworked
payed
for_whom


где поле user_id счетчик в MS Access2000,
поле for_whom связано с полем user_id
т.е. добавляем user-а и он получает user_id
а этот user_id надо передать в for_whom
Как это все организовать?
p.s. Delphi7 MS Access2000, через Ado
...
Рейтинг: 0 / 0
Помогите бегинеру с вставкой в связанные таблицы
    #32261017
realbold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да еще.
Связь создана в accesse
или можно подругому?
...
Рейтинг: 0 / 0
Помогите бегинеру с вставкой в связанные таблицы
    #32261786
realbold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может foreign key поможет ?(чтобы автоинкримент из одной таблицы в другую добавлялся)
...
Рейтинг: 0 / 0
Помогите бегинеру с вставкой в связанные таблицы
    #32261847
Фотография Mihail R.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на бефореПост присваиваешь поле for_whom.
какие сложности?
...
Рейтинг: 0 / 0
Помогите бегинеру с вставкой в связанные таблицы
    #32263068
realbold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чего-то события
Код: plaintext
1.
beforePost
AfterPost 

не работают
...
Рейтинг: 0 / 0
Помогите бегинеру с вставкой в связанные таблицы
    #32263129
Фотография Skleroz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TADOQuery TableUser:
SQL: "SELECT * FROM Table_user"

TADOQuery TableSalary:
SQL: "SELECT * FROM Table_salary WHERE for_whom=:user_id"
DataSource ставь TableUser

Все. Если TableSalary будет чего-нибудь орать про Parameters, то зайди в Params и добавь параметр 'user_id' (в АДО тип будет OleStr вроде)

при перемещении по TableUser в TableSalary будут отбираться соотв. записи, при добавлении в TableSalary записи поле for_whom будет заполняться в соотв. с тек. записью в TableUser

Я правильно тебя понял?
...
Рейтинг: 0 / 0
Помогите бегинеру с вставкой в связанные таблицы
    #32264642
realbold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Skleroz :
Я может объяснился не правильно но это чуть-чуть не то что надо. В моем случае все-равно лучшечем ничего. Дело в другом : как ты написал не работает почему-то. В AdoQuery TableSalary написал этот запрос - он ничего не выдает (нет ни ошибок не данных), хоть данные точно есть такие какие соответствуют запросу.
ps ADO Delphi 7, Ms Access 2000
...
Рейтинг: 0 / 0
Помогите бегинеру с вставкой в связанные таблицы
    #32273692
realbold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так и никто не написал.
Я читал что можно так:
1)
insert ........

затем

select@@identity

но это два обращения к базе и не совсем корректно - не пойдет

2) связано с

AdoDataSet.RecordSet.bookmark

но точно не знаю
может кто подскажет?
...
Рейтинг: 0 / 0
Помогите бегинеру с вставкой в связанные таблицы
    #32273812
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня тоже база на Access2000, ADO, C++Builder 6, но что-то я не понял в чем у тебя проблема.
Тебе что лень, послать запрос к локальной базе ?
Как я понял при добавлении записи в Table_user поле user_id ты не сам подсчитываешь, а оставляешь на совести Access-а. Но Access просто прибавляет единицу к максимальному значению этого поля.
Причем тут есть прикол:
если,к примеру , добавить запись (user_id получит значение k), а потом удалить эту запись, а затем снова добавить запись к этой таблице, то user_id будет равно не снова k,а k+1.

Так что лучше user_id посчитать самому, чтобы потом не мучаться с поиском этой записи (имена юзеров могут совпадать и по имени ты не сможешь узнать ключ). Т.е. нужно послать запрос:
select max(user_id) from Table_user
Потом полученное значение сохранить в какую-то переменную UserID, прибавить единицу и добавить запись в таблицу Table_user :
insert into Table_user (user_id,...) value (:parUser_id,...)
где parUser_id равен UserID.

Потом в таблицу Table_salary :
insert into Table_salary (...,for_whom) value (...,:parFor_whom)
где parFor_whom = UserID.
Можно конечно значение UserID передавать не через параметры, а лепить SQL строку динамически.
...
Рейтинг: 0 / 0
Помогите бегинеру с вставкой в связанные таблицы
    #32273839
realbold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Cauchy
База одна! А пользователей много.
Данные могут добавляться одновременно > max будет работать не правильно
...
Рейтинг: 0 / 0
Помогите бегинеру с вставкой в связанные таблицы
    #32273856
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть ты хочешь после insert узнать получившееся значение для user_id?
...
Рейтинг: 0 / 0
Помогите бегинеру с вставкой в связанные таблицы
    #32274016
realbold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да
Хочу user_id для вставки его в другую связ. таблицу
...
Рейтинг: 0 / 0
Помогите бегинеру с вставкой в связанные таблицы
    #32278610
Dmitri Krizhanovski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если используешь ADUQuery, то пока не сделашь Post (LockType=ltOptimistic) запись в главную таблицу не добавиться.

Код: plaintext
1.
2.
3.
4.
quUser.Insert;
quUser.Fields[ 1 ] := 'Name1';
quUser.Post;
NewID := quUser.Fields[ 0 ];


NewID получай как хочешь: или настрой автоматом (by Skleroz) или лови quUser.AfterPost, а на quSalary.BeforeInsert делай
Код: plaintext
1.
quSalary.Fields[ 3 ].Value := NewID;


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

Но если хочется использовать ltBatchOptimistic или SQL команды, то лучше отказаться от полей типа Счетчик (Autoincrement) IMHO.
...
Рейтинг: 0 / 0
Помогите бегинеру с вставкой в связанные таблицы
    #32278709
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
realbold
Если у тебя много пользователей, то я тебе не советую использовать Access,
т. к. я уже столкнулся с проблемой, что при запуске с другой машины иногда выдает ошибку, там где ее никогда не возникало.
Поэтому решил перейти на MSDE (это все же SQL сервер, хотя и не более 5 одновременно работающих клиентов, а у меня их больше трех никогда не будет).
...
Рейтинг: 0 / 0
Помогите бегинеру с вставкой в связанные таблицы
    #32278992
realbold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за ваши советы
...
Рейтинг: 0 / 0
Помогите бегинеру с вставкой в связанные таблицы
    #32278994
realbold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Cauchy
Вообщем уже все здесь написали
сделал так:

Код: 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.
with ADOQuery2 do
      begin
            sql.Clear;
            sql.add('select * from TUser');
            Open;
            Append;
            FieldValues['UName']:='AAAAA';
            FieldValues['UName2']:='BBBBB';
            ShowMessage('pause');// для проверки если вставлять
            post;
            per:=Recordset.Fields.Item['Uid'].Value;
            close;
       end;
             
     with ADOQuery1 do
      begin
            sql.Clear;
            sql.add('select * from TOrder');
            Open;
            Append;
            FieldValues['Osum']:='666';
            FieldValues['Ouser_id']:=per;
            ShowMessage('pause');
            post;
            close;
    end;

Таблицы чуть-чуть другие

TUser (UId,Uname,Uname2)
TOrder (OId,OUser_id,Osum)

p.s. LockType=ltOptimistic
Работает вроде бы правильно
Если я где ошибся напишите.
...
Рейтинг: 0 / 0
Помогите бегинеру с вставкой в связанные таблицы
    #32280126
Pacifist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitri Krizhanovski, a Vi ne iz Pitera slu4aem budete?
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите бегинеру с вставкой в связанные таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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