Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.012 c
4-1134316307
vovan_spb
2005-12-11 18:51
2006.03.12
Сообщение из sysTray


1-1138970225
ORMADA
2006-02-03 15:37
2006.03.12
Pascal Script (Rem Object)


3-1135230595
vista
2005-12-22 08:49
2006.03.12
Удаленный доступ к серверу Oracle


15-1139819794
msguns
2006-02-13 11:36
2006.03.12
Веб-дизайн. Инструмент.


15-1139568770
digger
2006-02-10 13:52
2006.03.12
аська глючит





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский