Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Редактирование запроса?


ForX ©   (2006-02-20 13:26:00) 

Есть ДБГрид в котором отображается запрос SELECT * FROM table.
По нажатию на Button1 открывается форма с полями DBEdit,
как эти поля заполнить значениями активной строки Грида, а потом записать если они изменились


sanich   (2006-02-20 13:32:00) [1]

В свойстве Dataset каждого DBEdit укажи тот же DataSet что и в DbGrid.


Ega23   (2006-02-20 13:30:00) [2]

Я обычно, простой Edit использую. Пример:

unit uClassFields;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls, DBCtrls, uDMMain, Db, ADODB, ExtCtrls, uKdrGPLib;

type
 TFClassFields = class(TForm)
   Label1: TLabel;
   Label2: TLabel;
   lcFldTypCod: TDBLookupComboBox;
   eCLSFldNam: TEdit;
   btnOK: TButton;
   btnCancel: TButton;
   aqFldTypCod: TADOQuery;
   DSFldTypCod: TDataSource;
   Bevel1: TBevel;
   Label3: TLabel;
   Label4: TLabel;
   eCLSFldOrd: TEdit;
   cbCLSFldMsk: TComboBox;
   Label6: TLabel;
   eCLSNam: TEdit;
   Label7: TLabel;
   eCLSFldCod: TEdit;
   procedure FormKeyDown(Sender: TObject; var Key: Word;
     Shift: TShiftState);
   procedure FormCreate(Sender: TObject);
   procedure DSFldTypCodDataChange(Sender: TObject; Field: TField);
   procedure FormDestroy(Sender: TObject);
   procedure IntegerEditKeyPress(Sender: TObject; var Key: Char);
   procedure btnOKClick(Sender: TObject);
 private
   FMode: Integer;
   procedure SetFMode(const Value: Integer);
   function FoolProtection:Boolean;

 public
   { Public declarations }

   property Mode:Integer Read FMode Write SetFMode;
 end;

var
 FClassFields: TFClassFields;

implementation

{$R *.DFM}

//*****************************************************************************

procedure TFClassFields.FormKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 if Key=VK_ESCAPE then ModalResult:=mrCancel;
end;

//*****************************************************************************

procedure TFClassFields.FormCreate(Sender: TObject);
begin
 DMMain.aKdrDBConnection.ConnectQueries(Self);
 aqFldTypCod.Open;
end;

//*****************************************************************************

procedure TFClassFields.SetFMode(const Value: Integer);
var
ss:string;
begin
 FMode := Value;

 eCLSNam.Text:=DMMain.aqClasses.FieldByName('CLSNam').AsString;

 if Value=0 then
  begin
   eCLSFldCod.Enabled:=True;
   ss:='Select CLSFldCod=IsNull(Max(CLSFldCod)+1, 1) from ClassFields';
   QuOpen(DMMain.aqTemp, ss);
   eCLSFldCod.Text:=DMMain.aqTemp.FieldByName('CLSFldCod').AsString;
   eCLSFldNam.Text:='';
   eCLSFldOrd.Text:='100';
   cbCLSFldMsk.ItemIndex:=1;
   Caption:='Добавление поля; класс - '+eCLSNam.Text;
   aqFldTypCod.First;
  end;

 if Value=1 then
  begin
   eCLSFldCod.Enabled:=False;
   With DMMain.aqClassFields do
    begin
     eCLSFldCod.Text:=FieldByName('CLSFldCod').AsString;
     eCLSFldNam.Text:=FieldByName('CLSFldNam').AsString;
     eCLSFldOrd.Text:=FieldByName('CLSFldOrd').AsString;
     cbCLSFldMsk.ItemIndex:=FieldByName('CLSFldMsk').AsInteger;
     aqFldTypCod.Locate('FldtypCod', FieldByName('FldTypCod').AsInteger, []);
    end; // With
   Caption:='Изменение поля; класс - '+eCLSNam.Text;
  end;

end;

//*****************************************************************************


Ega23   (2006-02-20 13:30:00) [3]


procedure TFClassFields.DSFldTypCodDataChange(Sender: TObject;
 Field: TField);
begin
 lcFldTypCod.KeyValue:=aqFldTypCod.FieldByName(lcFldTypCod.KeyField).AsVariant;
end;

//*****************************************************************************

procedure TFClassFields.FormDestroy(Sender: TObject);
begin
 aqFldTypCod.Close;
 aqFldTypCod.Connection:=nil;
end;

//*****************************************************************************

function TFClassFields.FoolProtection: Boolean;
var
ss:string;
i:Integer;
begin
 Result:=False;

 for i:=0 to ComponentCount-1 do
  if (Components[i] is TEdit) then
   TEdit(Components[i]).Text:=Trim(TEdit(Components[i]).Text);

 if Mode=0 then
  begin
   try
    StrToInt(eCLSFldCod.Text);
   except on E:Exception do
    begin
     eCLSFldCod.SetFocus;
     MessageBox(Handle, PChar('Неверно задан код метода!'),
                PChar('Внимание!'), MB_OK or MB_ICONWARNING);
     Exit;
    end;
   end;

   ss:='Declare @X int; Set NoCount ON; Set @X=0; '+
       'Select @X=1 from ClassFields where CLSFldCod='+eCLSFldCod.Text+'; '+
       'Set NoCount OFF; Select X=@X;';
   QuOpen(DMMain.aqTemp, ss);
   if DMMain.aqTemp.FieldByName('X').AsInteger=1 then
    begin
     eCLSFldCod.SetFocus;
     MessageBox(Handle, PChar('Метод с кодом '+eCLSFldCod.Text+' уже существует!'),
                PChar('Внимание!'), MB_OK or MB_ICONWARNING);
     Exit;

    end;
  end; // if Mode=0 then

 if eCLSFldNam.Text='' then
  begin
   eCLSFldNam.SetFocus;
   MessageBox(Handle, PChar('Не задано название метода!'),
              PChar('Внимание!'), MB_OK or MB_ICONWARNING);
   Exit;
  end;

 try
  StrToInt(eCLSFldOrd.Text);
 except on E:Exception do
  begin
   eCLSFldOrd.SetFocus;
   MessageBox(Handle, PChar('Неверно задан порядок!'),
              PChar('Внимание!'), MB_OK or MB_ICONWARNING);
   Exit;
  end;
 end;

 Result:=True;
end;

//*****************************************************************************

procedure TFClassFields.IntegerEditKeyPress(Sender: TObject;
 var Key: Char);
begin
 if not (Key in ['0'..'9', #8]) then Key:=#0;
end;

//*****************************************************************************

procedure TFClassFields.btnOKClick(Sender: TObject);
var
ss:String;
CLSFldCod:Integer;
begin
 if not FoolProtection then Exit;

 With DMMain, aqClassFields do
  begin
   ss:='exec S_RTTIProc @ActNam=';
   if Mode=0 then ss:=ss+ValX('ClassFields.Add',',');
   if Mode=1 then ss:=ss+ValX('ClassFields.Upd',',');

   ss:=ss+' @CLSID='+ValX(aqClasses.FieldByName('CLSID').AsInteger,',')+
          ' @CLSFldCod='+eCLSFldCod.Text+','+
          ' @OrgCLSID='+ValX(aqClasses.FieldByName('CLSID').AsInteger,',')+
          ' @FldTypCod='+ValX(aqFldTypCod.FieldByName('FldTypCod').AsInteger,',')+
          ' @CLSFldNam='+ValX(eCLSFldNam.Text,',')+
          ' @CLSFldMsk='+ValX(cbCLSFldMsk.ItemIndex,',')+
          ' @CLSFldOrd='+eCLSFldOrd.Text;

  end;
 QuOpen(DMMain.aqTemp, ss);

 CLSFldCod:=DMMain.aqTemp.FieldByName('Result').AsInteger;
 QuOpen(DMMain.aqClassFields);
 DMMain.aqClassFields.Locate('CLSFldCod', CLSFldCod, []);

 ModalResult:=mrOK;
end;

end.


Наверх

Титульная страница Поиск, карта сайта Написать письмо