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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2010, 21:28   #1
Droid
Форумчанин
 
Аватар для Droid
 
Регистрация: 24.04.2008
Сообщений: 440
По умолчанию Изменение ключа таблицы

Народ подскажите кто знает как можно реализовать данную функцию по редактированию записи, а именно мне надо отредактировать запись,
где есть в записи ключ поля типа даты. Причем не измняя структуру таблицы, т.к. поле это нужно, для хранения истории.


Код:
procedure TFD_SL.ListBox1Click(Sender: TObject);
begin
slp:=listbox1.ItemIndex+1;
end;

procedure TFD_SL.FormActivate(Sender: TObject);

begin
slp:=1;
sla:=1;
//dtp1:=dm.ADOQ_SLnachalo_dati_lecheniya.Value;
end;
procedure TFD_SL.ListBox2Click(Sender: TObject);
begin
sla:=listbox2.ItemIndex+1;
end;
procedure TFD_SL.BitBtn3Click(Sender: TObject);
function Del(Str: String): String;
  begin
     while Pos(' ', Str) > 0 do
        Delete(Str, Pos(' ', Str), 1);
     Result := Str;
  end;
var
idml,idpac:integer;
ndll: Tdatetime;
begin
if (Del(DBLCB1.Text)=('ЦПТП'))or (Del(DBLCB1.Text)=('цптп')) or (Del(DBLCB1.Text)=('ЦПЗ')) or (Del(DBLCB1.Text)=('цпз')) or 
(Del(DBLCB1.Text)=('ПТЦ'))or (Del(DBLCB1.Text)=('птц'))then
  begin
    slp:=0;
    fd_sl.Label4.Visible:=false;
    fd_sl.ListBox1.Visible:=false;
  end
  else
if (Del(DBLCB1.Text)<>('ЦПТП'))or (Del(DBLCB1.Text)<>('цптп')) or (Del(DBLCB1.Text)<>('ЦПЗ')) or (Del(DBLCB1.Text)<>('цпз')) or 
(Del(DBLCB1.Text)<>('ПТЦ'))or (Del(DBLCB1.Text)<>('птц'))then
  begin
  fd_sl.Label4.Visible:=true;
  fd_sl.ListBox1.Visible:=true;
  end;
    idml:=DBLCB1.KeyValue;
    ndll:=dm.ADOQ_SLnachalo_dati_lecheniya.Value;
    idpac:=dm.ADOQ_SLid_pacienta.Value;
    DM.ADOQ_SL.Close;
    DM.ADOQ_SL.SQL.Clear;
    DM.ADOQ_SL.SQL.Add('UPDATE stacionarnoe_lechenie SET
 nachalo_dati_lecheniya=:ndl,konec_dati_lecheniya=:kdl,id_pacienta=:idp,id_mesta_lecheniya=:idml,prinuditelnoe_ili_neprinuditelnoe=:slp,
dop_info=:di,stacionarnoe_ambulatornoe=:sa ');
    dm.ADOQ_SL.SQL.Add('WHERE (nachalo_dati_lecheniya=:ndll) AND (id_pacienta=:idpac)');
    DM.ADOQ_SL.Parameters.ParamByName('ndl').Value:=FormatDateTime('yyyy-mm-dd', datetimepicker1.Date);
    DM.ADOQ_SL.Parameters.ParamByName('kdl').Value:=FormatDateTime('yyyy-mm-dd', datetimepicker2.Date);
    DM.ADOQ_SL.Parameters.ParamByName('idp').Value:=DM.ADOQ_PACid_pacienta.Value;
    Dm.ADOQ_SL.Parameters.ParamByName('slp').Value:=slp;
    DM.ADOQ_SL.Parameters.ParamByName('idml').Value:=idml;
    DM.ADOQ_SL.Parameters.ParamByName('di').Value:=fd_sl.Memo1.Text;
    dm.ADOQ_SL.Parameters.ParamByName('sa').Value:=sla;
    dm.ADOQ_SL.Parameters.ParamByName('ndll').Value:=ndll;
    dm.ADOQ_SL.Parameters.ParamByName('idpac').Value:=idpac;
    DM.ADOQ_SL.ExecSQL;

    dm.ADOQ_SL.Close;
    dm.ADOQ_SL.SQL.Clear;
    DM.ADOQ_SL.SQL.Add('SELECT * FROM stacionarnoe_lechenie sl LEFT OUTER JOIN pacient pt ON sl.id_pacienta=pt.id_pacienta INNER 
JOIN mesto_lecheniya mlc ON mlc.id_mesta_lecheniya=sl.id_mesta_lecheniya WHERE sl.id_pacienta=:idp');
    DM.ADOQ_SL.Parameters.ParamByName('idp').Value:=dm.ADOQ_PACid_pacienta.Value;
    DM.ADOQ_SL.Open;
end;
1 старый программист, лучше новых 2-х

Последний раз редактировалось mihali4; 18.03.2010 в 22:11.
Droid вне форума Ответить с цитированием
Старый 18.03.2010, 23:10   #2
Droid
Форумчанин
 
Аватар для Droid
 
Регистрация: 24.04.2008
Сообщений: 440
По умолчанию

Пробовал строкой, делал точку останова, вроде параметры передает верно но не меняет
Код:
procedure TFD_SL.BitBtn3Click(Sender: TObject);
function Del(Str: String): String;
  begin
     while Pos(' ', Str) > 0 do
        Delete(Str, Pos(' ', Str), 1);
     Result := Str;
  end;
var
idml,idpac:integer;
//ndll: Tdatetime;
fdl,ndll:string;
begin
if (Del(DBLCB1.Text)=('ЦПТП'))or (Del(DBLCB1.Text)=('цптп')) or (Del(DBLCB1.Text)=('ЦПЗ')) or (Del(DBLCB1.Text)=('цпз'))or (Del(DBLCB1.Text)=('ПТЦ'))or (Del(DBLCB1.Text)=('птц'))then
  begin
    slp:=0;
    fd_sl.Label4.Visible:=false;
    fd_sl.ListBox1.Visible:=false;
  end
  else
if (Del(DBLCB1.Text)<>('ЦПТП'))or (Del(DBLCB1.Text)<>('цптп')) or (Del(DBLCB1.Text)<>('ЦПЗ')) or (Del(DBLCB1.Text)<>('цпз'))or (Del(DBLCB1.Text)<>('ПТЦ'))or (Del(DBLCB1.Text)<>('птц'))then
  begin
  fd_sl.Label4.Visible:=true;
  fd_sl.ListBox1.Visible:=true;
  end;
    idml:=DBLCB1.KeyValue;
    ndll:=datetostr(dm.ADOQ_SLnachalo_dati_lecheniya.Value);
    idpac:=dm.ADOQ_SLid_pacienta.Value;

    DM.ADOQ_SL.Close;
    DM.ADOQ_SL.SQL.Clear;
    DM.ADOQ_SL.SQL.Add('UPDATE stacionarnoe_lechenie SET nachalo_dati_lecheniya=:ndl,konec_dati_lecheniya=:kdl,id_mesta_lecheniya=:idml,
prinuditelnoe_ili_neprinuditelnoe=:slp,dop_info=:di,stacionarnoe_ambulatornoe=:sa ');
    dm.ADOQ_SL.SQL.Add('WHERE nachalo_dati_lecheniya=:ndll AND id_pacienta=:idpac');
    fdl:=FormatDateTime('yyyy-mm-dd', datetimepicker1.Date);
    DM.ADOQ_SL.Parameters.ParamByName('ndl').Value:=fdl;
    DM.ADOQ_SL.Parameters.ParamByName('kdl').Value:=FormatDateTime('yyyy-mm-dd', datetimepicker2.Date);
    //DM.ADOQ_SL.Parameters.ParamByName('idp').Value:=DM.ADOQ_PACid_pacienta.Value;
    Dm.ADOQ_SL.Parameters.ParamByName('slp').Value:=slp;
    DM.ADOQ_SL.Parameters.ParamByName('idml').Value:=idml;
    DM.ADOQ_SL.Parameters.ParamByName('di').Value:=fd_sl.Memo1.Text;
    dm.ADOQ_SL.Parameters.ParamByName('sa').Value:=sla;
    dm.ADOQ_SL.Parameters.ParamByName('ndll').Value:=ndll;
    dm.ADOQ_SL.Parameters.ParamByName('idpac').Value:=idpac;
    DM.ADOQ_SL.ExecSQL;

    dm.ADOQ_SL.Close;
    dm.ADOQ_SL.SQL.Clear;
    DM.ADOQ_SL.SQL.Add('SELECT * FROM stacionarnoe_lechenie sl LEFT OUTER JOIN pacient pt ON sl.id_pacienta=pt.id_pacienta INNER JOIN mesto_lecheniya mlc 
ON mlc.id_mesta_lecheniya=sl.id_mesta_lecheniya WHERE sl.id_pacienta=:idp');
    DM.ADOQ_SL.Parameters.ParamByName('idp').Value:=dm.ADOQ_PACid_pacienta.Value;
    DM.ADOQ_SL.Open;
end;
1 старый программист, лучше новых 2-х
Droid вне форума Ответить с цитированием
Старый 19.03.2010, 07:46   #3
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

Цитата:
Сообщение от Droid Посмотреть сообщение
Пробовал строкой, делал точку останова, вроде параметры передает верно но не меняет
Попробуйте присвоить значения параметров до формирования текста запроса.
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Старый 19.03.2010, 09:08   #4
Droid
Форумчанин
 
Аватар для Droid
 
Регистрация: 24.04.2008
Сообщений: 440
По умолчанию

Цитата:
Сообщение от Andrei Посмотреть сообщение
Попробуйте присвоить значения параметров до формирования текста запроса.
Пробовал не изменяет.
1 старый программист, лучше новых 2-х
Droid вне форума Ответить с цитированием
Старый 19.03.2010, 10:45   #5
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

а как на постановку задачи влияет вся эта портянка до и после запроса апдейт? мне вот вчера даже лень все это читать было

если трабла с датами, то может имеет смысл с масками форматирования разобраться?!
еще вывести собранный запрос на морду для дебага
какая субд?
soleil@mmc вне форума Ответить с цитированием
Старый 19.03.2010, 10:46   #6
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

Проверьте наличие записей по условию:

'SELECT * FROM stacionarnoe_lechenie WHERE nachalo_dati_lecheniya=:ndll AND id_pacienta=:idpac'

Может быть таких записей в базе нет.
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Старый 19.03.2010, 14:30   #7
Droid
Форумчанин
 
Аватар для Droid
 
Регистрация: 24.04.2008
Сообщений: 440
По умолчанию

Цитата:
Сообщение от Andrei Посмотреть сообщение
Проверьте наличие записей по условию:

'SELECT * FROM stacionarnoe_lechenie WHERE nachalo_dati_lecheniya=:ndll AND id_pacienta=:idpac'

Может быть таких записей в базе нет.
Записи есть, в mysql удаляет, но я вставлял этот запрос в delphi, он не работает... Надо как то ухитряться

Прекращайте ненужное цитирование предыдущих сообщений!
Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
А кроме кнопки "Цитата" внизу есть простое окно для ввода своего сообщения.
Или маленькая правая кнопочка "Быстрый ответ" справа от кнопки "Цитата".
Попадаете туда же.
Модератор
1 старый программист, лучше новых 2-х

Последний раз редактировалось mihali4; 21.03.2010 в 03:11.
Droid вне форума Ответить с цитированием
Старый 20.03.2010, 18:15   #8
Droid
Форумчанин
 
Аватар для Droid
 
Регистрация: 24.04.2008
Сообщений: 440
По умолчанию

все разобрался в формате был косяк formatdatetime('yyyy-mm-dd', DM.ADOQ_SLnachalo_dati_lecheniya.Va lue)
1 старый программист, лучше новых 2-х
Droid вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение ориентации таблицы Senjja Microsoft Office Word 6 10.03.2010 16:19
Макрос на изменение содержимого поля записи таблицы Reinforced Microsoft Office Access 2 07.10.2009 14:56
Изменение функции поля сводной таблицы Lal Microsoft Office Excel 3 05.03.2009 16:47
Изменение вида таблицы Execel nord_hk Microsoft Office Excel 4 05.10.2007 19:26