Главная страница
    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.014 c
15-1140051172
Ученик чародея
2006-02-16 03:52
2006.03.12
Какая тема научной работы была у Вирта?


4-1135072687
Volf_555
2005-12-20 12:58
2006.03.12
Как вывести на экран все иконки из dll-файла?


2-1140607527
Клон
2006-02-22 14:25
2006.03.12
Charset в Idmessage


2-1140595862
Валерий
2006-02-22 11:11
2006.03.12
Добавление формы из Builder


15-1139922163
Styx_
2006-02-14 16:02
2006.03.12
Вот кому Борланд продал Delphi :)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский