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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2010, 11:15   #11
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Честно говоря вижу много картинок, но непонятно что к чему, понятно что Form2 ваша и всё.. Давайте с начала. ЧТО за БД используете. Состав таблиц в этой БД, кактие компоненты используете. При каких действиях возникают проблемы (ваш код и что хотите получить в итоге на словах)

МНого дней ерунда, я сейчас меняю то что делел год назад, у меня запрос 1 на полтора монитора (монитор 21 дюйм разрешение 1680 на 1050) и всё потому что напихал глупых таблиц на парадоксе не прочитав как следует нужные книжки, теперь ещё переделывать и переносить на чтонибудь вроде FIrebird месяца 3-4.

Это я к чему, Осваивайте SQL и бросайте локальные бд, если с базами работать собираетесь очень очень осваивайте, даже в ущерб скорости написания.

Последний раз редактировалось vovk; 01.06.2010 в 11:24.
vovk вне форума Ответить с цитированием
Старый 01.06.2010, 11:29   #12
BaiAs
Форумчанин
 
Регистрация: 20.05.2010
Сообщений: 100
По умолчанию

бд - аццес
действ-щие. таблицы(только касательно приходной накл)-"PrihodNak","PrihNaklSlave"--главн и побочн соотв.


таблица"PrihodNak"-на сервере, адотейбл
поля
1)ID-счетчик
2)data-датавремя
3)nomer-числ
4)kontragent-числ
5)sklad_poluchatel-числ
*есть еще поле "summa_nds" но я с ним не работаю, просто переносится на клиента

на клиенте ClientDataSet с полями
1)ID-счетчик
2)data-датавремя
3)nomer-числ
4)kontragent-числ
5)sklad_poluchatel-числ
6)Postav-лукап по полю4
7)Sklad- лукап по полю5

все подключено работает
"PrihNaklSlave" описывать?
BaiAs вне форума Ответить с цитированием
Старый 01.06.2010, 11:42   #13
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Да не,.... что вы делаете?= читайте (что хотитте сделать), и как вы это действие кодом описываете. Ну надо же понять в чём несоответствие. Таблицы да эт нужно.
ТОлько вот таблицы существуют только в бд, любые компоненты формируют набор данных из таблицы (ну это в общем могут быть и отличия) вам это понятно? что в вашем клиент датасет существует лиш временный набор данных, который по идее должен работать с вашей таблией в бд, через какието компоненты. Вы можете добавить в клиентдатасет данные, потом отправить их для сохранения в таблтице вашу бд.

Последний раз редактировалось vovk; 01.06.2010 в 12:12. Причина: как всегда правил ошибки, ну люблю я их (не уверен что все доправил)
vovk вне форума Ответить с цитированием
Старый 01.06.2010, 15:29   #14
BaiAs
Форумчанин
 
Регистрация: 20.05.2010
Сообщений: 100
По умолчанию

сейчас сейчас
BaiAs вне форума Ответить с цитированием
Старый 01.06.2010, 15:51   #15
BaiAs
Форумчанин
 
Регистрация: 20.05.2010
Сообщений: 100
По умолчанию

// делаю пикер как бы в дб гриде

procedure TForm2.gridPNColExit(Sender: TObject);
begin
if gridpn.SelectedField.FieldName = 'data' then
DateTimePicker1.Visible := False
end;

// следующее в интернет е посмотрел

procedure TForm2.gridPNDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (gdFocused in State) then
begin
if (Column.Field.FieldName = 'data') then
with DateTimePicker1 do
begin
Left := Rect.Left + GridPN.Left + 1;
Top := Rect.Top + GridPN.Top + 1;
Width := Rect.Right - Rect.Left + 2;
Width := Rect.Right - Rect.Left + 2;
Height := Rect.Bottom - Rect.Top + 2;

Visible := True;
end;end;end;

procedure TForm2.gridPNKeyPress(Sender: TObject; var Key: Char);
begin
if (key = Chr(9)) then Exit;

if (gridpn.SelectedField.FieldName = 'data') then
begin
DateTimePicker1.SetFocus;
SendMessage(DateTimePicker1.Handle, WM_Char, word(Key), 0);
end
end;



procedure TForm2.DateTimePicker1DropDown(Send er: TObject);
begin
gridpn.DataSource.Edit;
end;

procedure TForm2.DateTimePicker1Change(Sender : TObject);
begin
if gridPN.DataSource.IsLinkedTo(DataMo dule1.cdsPrih) then begin
DataModule1.cdsPrihdata.Value := DateTimePicker1.DateTime;
end;end;

procedure TForm2.gridPNEnter(Sender: TObject);
begin

DataModule1.cdsPrih.Edit;
DataModule1.cdsPrihdata.Value:=Date TimePicker1.Date;
if DataModule1.cdsPrihSlave.Modified then
begin
DataModule1.cdsPrihSlave.Post;
end;
i:=DataModule1.cdsPrihSlave.ApplyUp dates(10);
DataModule1.cdsPrihSlave.Active:=fa lse;
DataModule1.cdsPrihSlave.Active:=tr ue;
if DataModule1.cdsPrih.Modified then DataModule1.cdsPrih.Post;
i:=DataModule1.cdsPrih.ApplyUpdates (10);
DataModule1.cdsPrih.Active:=false;
DataModule1.cdsPrih.Active:=true;
end;

// вот вкратце каждому полю присваиваю значение
procedure TForm2.DBNavigator2PrihSlaveEnter(S ender: TObject);
begin

DataModule1.cdsPrih.Edit;
DataModule1.cdsPrihdata.Value:=Date TimePicker1.Date;
if DataModule1.cdsPrihSlave.Modified then
begin
DataModule1.cdsPrihSlave.Post;
end;
i:=DataModule1.cdsPrihSlave.ApplyUp dates(10);
DataModule1.cdsPrihSlave.Active:=fa lse;
DataModule1.cdsPrihSlave.Active:=tr ue;
if DataModule1.cdsPrih.Modified then DataModule1.cdsPrih.Post;
i:=DataModule1.cdsPrih.ApplyUpdates (10);
DataModule1.cdsPrih.Active:=false;
DataModule1.cdsPrih.Active:=true;
end;
// здесь просто сохраняю все потому что метод пост не сохраняет
procedure TForm2.Button1Click(Sender: TObject);
begin
i:=DataModule1.cdsPrih.ApplyUpdates (10);
DataModule1.cdsPrih.Active:=false;
DataModule1.cdsPrih.Active:=true;
i:=DataModule1.cdsPrihSlave.ApplyUp dates(10);
DataModule1.cdsPrihSlave.Active:=fa lse;
DataModule1.cdsPrihSlave.Active:=tr ue;
end;
BaiAs вне форума Ответить с цитированием
Старый 01.06.2010, 16:00   #16
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

[CODE][/procedure TForm2.gridPNDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (gdFocused in State) then
begin
if (Column.Field.FieldName = 'data') then
with DateTimePicker1 do
begin
Left := Rect.Left + GridPN.Left + 1;
Top := Rect.Top + GridPN.Top + 1;
Width := Rect.Right - Rect.Left + 2;
Width := Rect.Right - Rect.Left + 2;
Height := Rect.Bottom - Rect.Top + 2;

Visible := True;
end;end;end;
CODE]

даже не читаю событие стоит использовать только если хотим самостоятельно расскрасить ячейки грида


Код:
procedure TForm2.gridPNKeyPress(Sender: TObject; var Key: Char);
begin
if (key = Chr(9)) then Exit;

if (gridpn.SelectedField.FieldName = 'data') then
begin
DateTimePicker1.SetFocus;
SendMessage(DateTimePicker1.Handle, WM_Char, word(Key), 0);
end
end;
что тут имели вввиду не совсем понятно
может всётаки сподобитесь написать коментарии к своим действиям

всё жду пока коментарии напишите (можно просто отредактировать сообщения, а и да пользуйтесь тегом код (#))
vovk вне форума Ответить с цитированием
Старый 01.06.2010, 16:22   #17
BaiAs
Форумчанин
 
Регистрация: 20.05.2010
Сообщений: 100
По умолчанию

спасибо за терпение
Код:
procedure TForm2.gridPNKeyPress(Sender: TObject; var Key: Char);
begin
  if (key = Chr(9)) then Exit;

  if (gridpn.SelectedField.FieldName = 'data') then
  begin
    DateTimePicker1.SetFocus;
    SendMessage(DateTimePicker1.Handle, WM_Char, word(Key), 0);
  end
end;
смысл сдесь чтоб подставить дату в ячейки

// чтобы не выходила ошибка "Data sourse not edit or insert mode"
Код:
procedure TForm2.DateTimePicker1DropDown(Send er: TObject);
begin
gridpn.DataSource.Edit;
end;
// присваиваю полю значение пикера если выбирается другое значение в нем
Код:
procedure TForm2.DateTimePicker1Change(Sender : TObject);
begin
if gridPN.DataSource.IsLinkedTo(DataMo dule1.cdsPrih) then begin
DataModule1.cdsPrihdata.Value := DateTimePicker1.DateTime;
end;end;

// здесь я сохраняюзапись и обновляю таблицу чтобы не выскакивало
//сообщение "Key violation"
// приходится нажимать при вводе каждой строки
Код:
procedure TForm2.gridPNEnter(Sender: TObject);
begin
// режим ввода
DataModule1.cdsPrih.Edit;
// присвоение значения полю
DataModule1.cdsPrihdata.Value:=Date TimePicker1.Date;
// если данные в таблице изменены
if DataModule1.cdsPrihSlave.Modified then
begin
DataModule1.cdsPrihSlave.Post;
end;
i:=DataModule1.cdsPrihSlave.ApplyUp dates(10);
DataModule1.cdsPrihSlave.Active:=fa lse;
DataModule1.cdsPrihSlave.Active:=tr ue;
if DataModule1.cdsPrih.Modified then DataModule1.cdsPrih.Post;
i:=DataModule1.cdsPrih.ApplyUpdates (10);
DataModule1.cdsPrih.Active:=false;
DataModule1.cdsPrih.Active:=true;
end;
извините не дописал

сохраняем данные
Код:
begin
DataModule1.cdsPrihSlave.Post;
end;
i:=DataModule1.cdsPrihSlave.ApplyUp dates(10);
DataModule1.cdsPrihSlave.Active:=fa lse;
DataModule1.cdsPrihSlave.Active:=tr ue;
if DataModule1.cdsPrih.Modified then DataModule1.cdsPrih.Post;
i:=DataModule1.cdsPrih.ApplyUpdates (10);
DataModule1.cdsPrih.Active:=false;
DataModule1.cdsPrih.Active:=true;
end;
код повторяется для подстраховки, надо чтоб данные сохранялись

Последний раз редактировалось Stilet; 01.06.2010 в 16:53.
BaiAs вне форума Ответить с цитированием
Старый 01.06.2010, 17:08   #18
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

С трудом понимаю вашу логику.. Я бы к примеру давал доступ к DateTimePicker1, толкько если гдето первёл таблицу в режим добавлнения или редактирования. Или наоборот при выборе нового значения в пикере переводил таблицу в режим редатирования , записывал данные, и сохранял, то есть всё делал кпримеру на клоуз ап и действия выглядели бы так, проверили изменилось нет если да, то переводим базув dsEdit записываем, сохраняем. Ченж происходит всегда при смене не зависимо от того, определились мы с датой или нет (по моему так)
gridPNEnter происхордит при получении фокуса и чтото записывать при этом ... ну както неправильно чтоли, Сохранение надо предусмотреть при окончании редактирования, илии добавления новой записи.

тут как вы говорит 2 раза для гарантии.. почему не 5 раз.. а вдруг 2 не сработает? Естественно подобное нужно проводить 1 раз и просто контролировать , к примеру try .... except
Код:
begin
DataModule1.cdsPrihSlave.Post;
end;
i:=DataModule1.cdsPrihSlave.ApplyUp dates(10);
DataModule1.cdsPrihSlave.Active:=false;
DataModule1.cdsPrihSlave.Active:=true;
if DataModule1.cdsPrih.Modified then DataModule1.cdsPrih.Post;
i:=DataModule1.cdsPrih.ApplyUpdates (10);
DataModule1.cdsPrih.Active:=false;
DataModule1.cdsPrih.Active:=true;
end;
и ещё



Код:
procedure TForm2.gridPNEnter(Sender: TObject);
begin
// режим ввода
DataModule1.cdsPrih.Edit;//переводим таблице в режим редактирования, непонятно ведь просто выделили.. хотя может так надо
// присвоение значения полю //вот вот меняем данные
DataModule1.cdsPrihdata.Value:=Date TimePicker1.Date;
// если данные в таблице изменены//конечно изменены, мыже их сами только что поменяли
if DataModule1.cdsPrihSlave.Modified then
begin //зачем оболочка бегин енд? ведь всего 1 строка выполняется, но это не ошибка
DataModule1.cdsPrihSlave.Post;
end;
i:=DataModule1.cdsPrihSlave.ApplyUp dates(10);//в таблицу
DataModule1.cdsPrihSlave.Active:=fa lse;//переоткрываем
DataModule1.cdsPrihSlave.Active:=tr ue;
if DataModule1.cdsPrih.Modified then DataModule1.cdsPrih.Post;// чего постим? вед только что открыли при всём желаении изменить не могли
i:=DataModule1.cdsPrih.ApplyUpdates (10);//контрольный выстрел .. хз зачем
DataModule1.cdsPrih.Active:=false;// опять переоткрываем видать чтоб не расслаблялись
DataModule1.cdsPrih.Active:=true;
end;
немного рокоментировал, и всё равно особо не понял где проблема.. в подходе да проблема есть, скорее всего некоторые последовательности действий приведут к труднопрогнозируемуму результатту (просто я так думаю мы не всё увидели, а судя по подходу..)
vovk вне форума Ответить с цитированием
Старый 01.06.2010, 17:57   #19
BaiAs
Форумчанин
 
Регистрация: 20.05.2010
Сообщений: 100
По умолчанию

вот посмотрите
Код:
DataModule1.cdsRashdata.Value:=DateTimePicker1Rash.Date;
DataModule1.cdsRashnomer.Value:=StrToInt(DBEdit2Nomer.Text);
DataModule1.cdsRasSlavekolvo.Value:=StrToInt(DBEdit1kolvo.Text);
i:=DataModule1.cdsRash.ApplyUpdates(-1);
DataModule1.cdsRash.Active:=false;
DataModule1.cdsRash.Active:=true;
режим ввода поставил
а все равно выдает ошибку ...not edit or indert mode
BaiAs вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
из дбгрид в sql server kate158 БД в Delphi 7 25.08.2009 16:56
Как сделать,так что бы запись в из одного ДБГрида добавлялась в другой ДБгрид Hito БД в Delphi 10 19.04.2009 21:14
Добавить строку в ДБГрид и удалить MbIJIO БД в Delphi 4 18.04.2009 12:45
буфер,дбгрид,навигация по записям kate158 БД в Delphi 0 28.10.2008 15:59
первод данных из дбГрид в СтрингГрид! ANT35 Помощь студентам 3 19.10.2008 21:08