Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите бегинеру с вставкой в связанные таблицы / 17 сообщений из 17, страница 1 из 1
10.09.2003, 09:48
    #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
10.09.2003, 12:27
    #32261017
realbold
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите бегинеру с вставкой в связанные таблицы
Да еще.
Связь создана в accesse
или можно подругому?
...
Рейтинг: 0 / 0
11.09.2003, 07:09
    #32261786
realbold
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите бегинеру с вставкой в связанные таблицы
Может foreign key поможет ?(чтобы автоинкримент из одной таблицы в другую добавлялся)
...
Рейтинг: 0 / 0
11.09.2003, 09:13
    #32261847
Mihail R.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите бегинеру с вставкой в связанные таблицы
на бефореПост присваиваешь поле for_whom.
какие сложности?
...
Рейтинг: 0 / 0
12.09.2003, 06:48
    #32263068
realbold
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите бегинеру с вставкой в связанные таблицы
Чего-то события
Код: plaintext
1.
beforePost
AfterPost 

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

затем

select@@identity

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

2) связано с

AdoDataSet.RecordSet.bookmark

но точно не знаю
может кто подскажет?
...
Рейтинг: 0 / 0
24.09.2003, 11:13
    #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
24.09.2003, 11:40
    #32273839
realbold
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите бегинеру с вставкой в связанные таблицы
to Cauchy
База одна! А пользователей много.
Данные могут добавляться одновременно > max будет работать не правильно
...
Рейтинг: 0 / 0
24.09.2003, 11:50
    #32273856
Cauchy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите бегинеру с вставкой в связанные таблицы
То есть ты хочешь после insert узнать получившееся значение для user_id?
...
Рейтинг: 0 / 0
24.09.2003, 13:15
    #32274016
realbold
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите бегинеру с вставкой в связанные таблицы
Да
Хочу user_id для вставки его в другую связ. таблицу
...
Рейтинг: 0 / 0
29.09.2003, 17:12
    #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
29.09.2003, 17:53
    #32278709
Cauchy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите бегинеру с вставкой в связанные таблицы
realbold
Если у тебя много пользователей, то я тебе не советую использовать Access,
т. к. я уже столкнулся с проблемой, что при запуске с другой машины иногда выдает ошибку, там где ее никогда не возникало.
Поэтому решил перейти на MSDE (это все же SQL сервер, хотя и не более 5 одновременно работающих клиентов, а у меня их больше трех никогда не будет).
...
Рейтинг: 0 / 0
30.09.2003, 05:30
    #32278992
realbold
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите бегинеру с вставкой в связанные таблицы
Всем спасибо за ваши советы
...
Рейтинг: 0 / 0
30.09.2003, 05:44
    #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
01.10.2003, 01:37
    #32280126
Pacifist
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите бегинеру с вставкой в связанные таблицы
Dmitri Krizhanovski, a Vi ne iz Pitera slu4aem budete?
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите бегинеру с вставкой в связанные таблицы / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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