[ Ghogilee @ 05.01.2005. 12:31 ] @
Pravim neku vrstu SQL analyzera ali sam naišao na probleme.
Za sada se aplikacija sastoji iz dve forme: OpenForm i MainForm.
Kod za OpenForm je sledeći:
Code:

unit Open;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, ExtCtrls, Db, DbTables;

type
  TOpenForm = class(TForm)
    Bevel1: TBevel;
    Bevel2: TBevel;
    OKBtn: TBitBtn;
    CancelBtn: TBitBtn;
    ComboBox1: TComboBox;
    ComboBox2: TComboBox;
    Label1: TLabel;
    Label2: TLabel;
    procedure FormActivate(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  OpenForm: TOpenForm;

implementation

{$R *.DFM}

procedure TOpenForm.FormActivate(Sender: TObject);
begin
Session.GetAliasNames(ComboBox1.Items);
end;

procedure TOpenForm.ComboBox1Change(Sender: TObject);
begin
Session.GetTableNames(ComboBox1.Text, '*.*', False, False, ComboBox2.Items);
ComboBox2.Itemindex :=0;

end;

end.


A za Main Form je sledeći:

Code:


unit Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, StdCtrls, Grids, DBGrids, Buttons, ExtCtrls, DBCtrls, Db,
  DBTables, Open;

type
  TMainForm = class(TForm)
    querypage: TPageControl;
    TabSheet1: TTabSheet;
    operacijetb: TTabSheet;
    Bevel1: TBevel;
    Bevel2: TBevel;
    PerformBitBtn: TBitBtn;
    DBGrid1: TDBGrid;
    Memo1: TMemo;
    DBNavigator1: TDBNavigator;
    DataSource1: TDataSource;
    Query1: TQuery;
    Label1: TLabel;
    DBGrid2: TDBGrid;
    Openbitbtn: TBitBtn;
    CloseBitBtn: TBitBtn;
    procedure OpenBitBtnClick(Sender: TObject);
    procedure PerformBitBtnClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

{$R *.DFM}

procedure TMainForm.OpenBitBtnClick(Sender: TObject);
begin
if OpenForm.ShowModal = mrOk then
begin
Query1.Close;
try
Query1.DatabaseName := OpenForm.ComboBox1.Text;
Query1.SQL.Clear;
Query1.SQL.Add('Select * From ' + OpenForm.ComboBox2.Text);
Memo1.Lines := Query1.SQL;
Query1.Open;
Memo1.SetFocus;
PerformBitBtn.Enabled := True;
except;
ShowMessage('Greška prilikom otvaranja baze');
end;
end;
end;


procedure TMainForm.PerformBitBtnClick(Sender: TObject);
begin
Query1.Close;
try
Query1.SQL := Memo1.Lines;
Query1.Open;
except
ShowMessage('Neispravan Upit');
end;
end;

procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Query1.Close;
end;

end.


Ideja cele priče je da korisnik izabere Alias i tabelu a da zatim izvršava SQL upite(u Memo polju).
Sve to dobro radi, ali SQL upiti su ograničeni na SELECT komande. Druge komande poput INSERT i DELETE ne poznaje, odnosno neće da izvršava.
Probao sam da promenim
Code:

Query1.Open;

u sledeće:
Code:

Query1.ExecSQL;

Medjutim tako uopšte ne izvršava SQL naredbe. Molim za pomoć.
Unapred hvala!
[ sasas @ 05.01.2005. 12:56 ] @
Dugo nisam koristio TQuery, ali cini mi se da su oni "read only". Tj, ako hoces izvrsavati INSERT, DELETE & UPDATE, da trebas dodati Update objekat.

ss.
[ Ghogilee @ 05.01.2005. 13:21 ] @
Sale, TQuery 100% može da izvršava INSERT, UPDATE itd itd, (imam primera u drugim aplikacijama) samo umesto Open, komanda bude ExecSQL. Međutim meni u ovom primeru ne radi.... :( ...
Kako bi bio primer sa Update objektom?
[ sasas @ 05.01.2005. 13:56 ] @
Kao sto rekoh TQuery nisam koristio od nemam pojma kad, tako da je moj post vise lupanje ... eto da se prica nesto :)
Valjda ce neko moci vise da ti pomogne...

ss.
[ Rapaic Rajko @ 10.01.2005. 13:57 ] @
Property TQuery.RequestLive...? Takodje nagadjam.

Rajko
[ _v!rus_ @ 10.01.2005. 14:59 ] @
Secam se kad sam radio program za maloprodaje i veleprodaje da sam koristio TQuery zbog mogucnosti vracanja sortiranih recorda. Radilo je super samo je imalo jednu manu: Kada su recordi sortirani drugacije nego u orginalnoj tabeli nece da radi append, edit i delete (Ali BDE-ov TQuery.Edit, ne iz SQL-a, posto nisam dovoljno znao SQL). Samo sa filterom (WHERE ***) radi, ali ako ima i sortiranje (ORDER BY ***) onda nece...Nisam uspeo to da resim do dana danasnjeg, koristio sam VEOMA prljavi budz sa kopiranjem recorda u novu Tmp tabelu i kasnijim lociranjem recorda i izmenom u glavnoj tabeli...

Upravo sam shvatio da moj post nista ne pomaze...
[ Ghogilee @ 11.01.2005. 09:55 ] @
Misterija resena! Posto programcic sada sljaka dobro voleo bih da ga "okacim" ovde ako ima zainteresovanih ali je mislim prevelik. Pa ako neko hoce source neka samo lepo zamoli
Pozdrav!.
[ sasas @ 11.01.2005. 10:21 ] @
I u cemu je bila misterija?

ss.
[ Ghogilee @ 11.01.2005. 10:36 ] @
Za Saleta i ostale
Treba da instalirate komponentu JonComboBox koja omogucava proceduru OnSelect koju dajem kao upload prilog bez kecapa i senfa
Main Forma (SQLisGood.pas)
Definicije objekata:
Iz liste vidite koji objekti se koriste tako da necu posebno da objasnjavam. Uglavnom bitne su sledece stvari:
Database1 objekat - DatabaseName je DB
Query1 (TQuery) objektu se kao DatabaseName postavlja naziv DB (datasource prazan)
DataSource1 objektu je DataSet Query1
Query2 objektu takodje DatabaseName je DB
DataSource2 objektu je DataSet Query2 (logično)
U JonComboBox4 (Sql komande) sam ubacio listu SQL komandi ubacite šta hoćete
Objekat Memo2 je sakriven isto kao i DBGrid2

Za DBGrid1 postavite sledeće opcije:
[dgEditing,dgTitles,dgIndicator,dgColumnResize,dgColLines,dgRowLines,dgTabs,dgConfirmDelete,dgCancelOnExit]
Datasource: DataSource1

Za DBGrid2 je DataSource - DataSource2

Nadam se da je za sada sve jasno

Info.pas

Par objekata. Bitno je da je Memo1 podešen na Visible - False i ostali objekti su standardni (SaveDialog, FontDialog, PrintDialog i ColorDialog)

Ostali elementi splash.pas i version.pas su proizvoljni
Pozdrav i nadam se da ce nekome koristiti!

[ Ghogilee @ 11.01.2005. 10:39 ] @
Nece da mi prikaze kod kao odgovor (verovatno je predugacak) pa evo ga u tekst fajlovima kao prilog uz poruku.
[ Ghogilee @ 11.01.2005. 10:42 ] @
Ups! Zaboravio sam da dodam Info.pas