Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2009, 18:10   #1
Nomiko
 
Регистрация: 12.05.2009
Сообщений: 8
По умолчанию Установка курсора на новую запись в DBGrid

Доброго времени суток!
Подскажите пожалуйста как установить курсор на только что добавленную запись в DBGrid?
ДОбавляю записи через Append и FieldByName, все отлично добавляется, но курсор устанавливается в первую запись, а у меня проблема что после формы с добавлением записей открывается форма добавления других записей в другую таблицу, но связаны они по коду. Получается что во вторую таблицу добавляются записи из первой но с данными из первой записи, а не с новой
Таблицы: первая Client (cod_cl, fam, name, otch), вторая Protocol (cod_cl, data_p, summa) связаны соответсвенно по cod_cl.
Nomiko вне форума Ответить с цитированием
Старый 21.05.2009, 18:30   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Client.Locate('cod_cl',{то, что добавлялось},[loCaseInsensitive])
_SERGEYX_ вне форума Ответить с цитированием
Старый 21.05.2009, 18:43   #3
Nomiko
 
Регистрация: 12.05.2009
Сообщений: 8
По умолчанию

Не скажу, что я блондинка, но видимо бываю ею в такие моменты вот кусочек кода с добавлением, наверное вам так будет проще

Цитата:
procedure Tposetiteli.Button6Click(Sender: TObject);
begin
Pos:=TPos.Create(self);
Pos.ShowModal;
if Pos.ModalResult=mrOk then
begin
posetiteli.dsprosmotr.Append;
posetiteli.dsprosmotr.FieldByName(' fam').AsString:=pos.edit1.text;
posetiteli.dsprosmotr.FieldByName(' name').AsString:=pos.edit2.text;
posetiteli.dsprosmotr.FieldByName(' otch').AsString:=pos.edit3.text;
posetiteli.dsprosmotr.FieldByName(' data_roj').AsDateTime:=pos.DateTime Picker1.Date;
posetiteli.dsprosmotr.FieldByName(' cod_st').AsInteger:=StrToInt(pos.ed it4.Text);
posetiteli.dsprosmotr.post;
posetiteli.dsprosmotr.Locate('cod_c l', fam, name, otdh, data_roj, cod_st, [loCaseInsensitive]);
posetiteli.dsprosmotr.Active:=false ;
posetiteli.dsprosmotr.Active:=true;
end;
pos.Free;
end;
Nomiko вне форума Ответить с цитированием
Старый 21.05.2009, 18:56   #4
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

попробуй не переоткрывать табличку, возможно, тогда обойдешься без локейта
Код:
begin
Pos:=TPos.Create(self);

if Pos.ShowModal=mrOk then
begin
posetiteli.dsprosmotr.Append;
posetiteli.dsprosmotr.FieldByName(' fam').AsString:=pos.edit1.text;
posetiteli.dsprosmotr.FieldByName(' name').AsString:=pos.edit2.text;
posetiteli.dsprosmotr.FieldByName(' otch').AsString:=pos.edit3.text;
posetiteli.dsprosmotr.FieldByName(' data_roj').AsDateTime:=pos.DateTime Picker1.Date;
posetiteli.dsprosmotr.FieldByName(' cod_st').AsInteger:=StrToInt(pos.ed it4.Text);
posetiteli.dsprosmotr.post;
/*posetiteli.dsprosmotr.Locate('cod_c l', fam, name, otdh, data_roj, cod_st, [loCaseInsensitive]);
posetiteli.dsprosmotr.Active:=false ;
posetiteli.dsprosmotr.Active:=true;*/
end;
pos.Free;
end;
либо локейт все-таки делать, но после переоткрытия таблички
Код:
posetiteli.dsprosmotr.Active:=false ;
posetiteli.dsprosmotr.Active:=true;
posetiteli.dsprosmotr.Locate('cod_cl', cod_cl, []);
cod_cl - это поле заполняется на триггере генератором/сиквенсом?
если ваша БД позволяет использовать ХП, то лучше добавление/изменение/удаление записей реализовать на ХП и из нее же получать значение ключевого поля добавленной записи
либо использовать компоненты, которые умеют получать значения ключ.поля вставленной записи

Цитата:
Таблицы: первая Client (cod_cl, fam, name, otch), вторая Protocol (cod_cl, data_p, summa) связаны соответсвенно по cod_cl.
а из этого получается, что ваша таблица просто разбита на 2 куска

Последний раз редактировалось soleil@mmc; 21.05.2009 в 19:03.
soleil@mmc вне форума Ответить с цитированием
Старый 21.05.2009, 19:16   #5
Nomiko
 
Регистрация: 12.05.2009
Сообщений: 8
По умолчанию

Это поле заполняется генератором.
А при использовании Locate выдает ошибку
Вообще задача стоит в то, чтобы внести посетителя в списки и указать сумму, которую он заплатил. Для сохранения используется таблица client, а для сохранения суммы Protocol. Может тогда кто нить подскажет как это подругому можно сделать? Это последнее что мне в дипломе сделать осталось! )
Nomiko вне форума Ответить с цитированием
Старый 21.05.2009, 19:28   #6
Nomiko
 
Регистрация: 12.05.2009
Сообщений: 8
По умолчанию

А может можно сделать чтобы запись в начало списка добавлялать? Так наверное было бы проще
Nomiko вне форума Ответить с цитированием
Старый 21.05.2009, 22:26   #7
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

ты там что-то про гриды говорил
а вот это какого типа в проге объявлено?
posetiteli?
posetiteli.dsprosmotr?
и чего за БД?
soleil@mmc вне форума Ответить с цитированием
Старый 22.05.2009, 09:29   #8
Nomiko
 
Регистрация: 12.05.2009
Сообщений: 8
По умолчанию

БД в Firebird. Posetiteli - имя формы, dsprosmotr-DataSet
Nomiko вне форума Ответить с цитированием
Старый 22.05.2009, 11:44   #9
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от Nomiko Посмотреть сообщение
БД в Firebird. Posetiteli - имя формы, dsprosmotr-DataSet
и какие компоненты ты используешь?
тебе же сам файрберд велел заюзать компоненты FIB+
ищи книжку с авторами Ковязин, Востриков (здесь на форуме в этом же разделе была в списке литературы) и читай там главу про фибовские компоненты
soleil@mmc вне форума Ответить с цитированием
Старый 24.05.2009, 18:40   #10
Nomiko
 
Регистрация: 12.05.2009
Сообщений: 8
По умолчанию

Большое спасибо всем разобралась, сделала
Nomiko вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переход на новую строку delphin100 Общие вопросы Delphi 9 31.05.2012 04:52
Последняя запись из DBGrid в отчёт Raccoon Помощь студентам 2 25.05.2008 13:59
Установка курсора в определеное место экрана? ALEX_RAS Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 23.05.2008 20:49
Установка собственного курсора Amateur Общие вопросы Delphi 4 13.11.2007 05:42
Оцените новую версию UnD)eaD)Snake Софт 4 23.08.2007 10:15