Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.12;
Скачать: CL | DM;

Вниз

Редактирование запроса?   Найти похожие ветки 

 
ForX   (2006-02-20 13:26) [0]

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


 
Ega23 ©   (2006-02-20 13:30) [1]

Я обычно, простой 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) [2]


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.



 
sanich ©   (2006-02-20 13:32) [3]

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



Страницы: 1 вся ветка

Текущий архив: 2006.03.12;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.041 c
15-1139894641
Лисенок
2006-02-14 08:24
2006.03.12
без темы


2-1141044851
dera
2006-02-27 15:54
2006.03.12
как сделать исключение для SQL-запроса?


4-1134982464
Chaser
2005-12-19 11:54
2006.03.12
При закрытии программы - минимизация в трей


2-1140813780
TStas
2006-02-24 23:43
2006.03.12
В каком модуле описана DeleteFolder


2-1140641003
TimScorp
2006-02-22 23:43
2006.03.12
ListBox