Lazarus 3.0 (2023.12.21.)
Letöltés

  • Oldal:
  • 1

TÉMA:

Válasz:MYSQL alap 2010 dec. 17 09:30 #673

  • brownie
  • brownie profilkép
  • Új tag
  • Új tag
  • Hozzászólások: 10
  • Köszönetek: 0
Szia!
Master-detail kapcsolatra nincs lehetőség, csak paraméterezett queryvel tudod megoldani.Nem tudom mit szeretnél megjeleníteni, esetleg még a dblookupcombobox, vagy a dblookuplistbox is használnató.

Válasz:MYSQL alap 2010 dec. 16 14:02 #672

  • harrichy
  • harrichy profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 44
  • Köszönetek: 0
Sziasztok

még egy alap dologgal nem boldogulok.
Régebben dbf táblákkal dolgoztam ,ott volt lehetőség master-detail kapcsolatra.
megadtam a master soure-t,masterfield-et a kapcsolandó táblán és már működött is.Hasonlót szeretnék MYSQL-el, de nem tudom hogyan
működik.
Előre is köszi..

Válasz:MYSQL alap 2010 nov. 27 11:38 #647

  • brownie
  • brownie profilkép
  • Új tag
  • Új tag
  • Hozzászólások: 10
  • Köszönetek: 0
Szia!
Tömböt csak pascalban tudsz deklarálni, a mysql nem ismeri. A pascal tömb elemeit ciklusban tudod beolvasni. Ha tudod az elemek számát for ciklussal, ha nem pl. így: while tomb<>''
utasítások. De szerintem a szövegösszefűzéses sql utasítások futtatása helyett jobb az sqlquery metódusait használni. Sajnos komplett példaprogramot nem tudok feltölteni, de itt egy egyszerű telefonkönyv program forrása. Remélem segít.
unit uTelefonkonyv;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, sqldb, db, FileUtil, LResources, Forms, Controls, Graphics,
Dialogs, DBGrids, DbCtrls, ExtCtrls, StdCtrls;

type

{ TfrmTelefonkonyv }

TfrmTelefonkonyv = class(TForm)
Bevel1: TBevel;
btnMegsem: TButton;
btnOK: TButton;
btnUj: TButton;
btnSzerkeszt: TButton;
btnTorles: TButton;
btnX: TButton;
Datasource1: TDatasource;
DBGrid1: TDBGrid;
edtId: TEdit;
edtMobil: TEdit;
edtNev: TEdit;
edtVezetekes: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Panel1: TPanel;
SQLQuery1: TSQLQuery;
SQLQuery2: TSQLQuery;
SQLTransaction1: TSQLTransaction;
procedure btnMegsemClick(Sender: TObject);
procedure btnOKClick(Sender: TObject);
procedure btnSzerkesztClick(Sender: TObject);
procedure btnTorlesClick(Sender: TObject);
procedure btnUjClick(Sender: TObject);
procedure btnXClick(Sender: TObject);
procedure DBGrid1CellClick(Column: TColumn);
procedure DBGrid1Enter(Sender: TObject);
procedure DBGrid1Exit(Sender: TObject);
procedure DBGrid1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormActivate(Sender: TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure SQLQuery1AfterPost(DataSet: TDataSet);
procedure SQLQuery1PostError(DataSet: TDataSet; E: EDatabaseError;
var DataAction: TDataAction);

private
{ private declarations }
procedure Engedelyez;
procedure Torol;
procedure Frissit;
public
{ public declarations }
end;

var
frmTelefonkonyv: TfrmTelefonkonyv;

implementation
uses uBejelentkezes;
{ TfrmTelefonkonyv }



procedure TfrmTelefonkonyv.Frissit;
begin
if btnSzerkeszt.Enabled=True then
with sqlquery2 do begin
close;
SQL.Text:='select * from telefonkonyv where id=:id';
open;
edtID.Text:=Fieldbyname('id').AsString;
edtNev.Text:=Fieldbyname('nev').AsString;
edtMobil.Text:=Fieldbyname('mobil').AsString;
edtVezetekes.Text:=Fieldbyname('vezetekes').AsString;
end;
end;

procedure TfrmTelefonkonyv.Engedelyez;
begin
with frmTelefonkonyv do begin
height:=455;
Panel1.Visible:=true;
btnOK.Enabled:=true;
end;
end;

procedure TfrmTelefonkonyv.Torol;
begin
edtId.Clear;
edtNev.clear;
edtMobil.clear;
edtVezetekes.clear;
end;

procedure TfrmTelefonkonyv.FormCreate(Sender: TObject);
begin
height:=290;
width:=824;
edtID.MaxLength:=5;
sqlquery2.DataSource:=Datasource1;
sqlquery1.sql.text:='select * from telefonkonyv order by id';
try
sqlquery1.active:=true;
except
showmessage('Nem lehet a táblához kapcsolódni!');
sqlquery1.close;
end;
end;

procedure TfrmTelefonkonyv.SQLQuery1AfterPost(DataSet: TDataSet);
begin
sqlquery1.applyupdates;

end;


procedure TfrmTelefonkonyv.SQLQuery1PostError(DataSet: TDataSet;
E: EDatabaseError; var DataAction: TDataAction);
begin
sqlquery1.Cancel;
torol;
end;

procedure TfrmTelefonkonyv.FormClose(Sender: TObject;
var CloseAction: TCloseAction);
begin
sqlquery1.applyupdates;
sqlquery1.close;
sqlquery2.close;
frmBejelentkezes.odbcconnection1.connected:=false;
Application.terminate;


end;

procedure TfrmTelefonkonyv.FormActivate(Sender: TObject);
begin
frmBejelentkezes.Visible:=false;
end;

procedure TfrmTelefonkonyv.btnUjClick(Sender: TObject);
begin
Engedelyez;
btnSzerkeszt.Enabled:=false;
btnTorles.Enabled:=false;
torol;
end;

procedure TfrmTelefonkonyv.btnXClick(Sender: TObject);
begin
Panel1.Visible:=false;
frmTelefonkonyv.height:=290;
btnUj.Enabled:=True;
btnSzerkeszt.Enabled:=True;
btnTorles.Enabled:=True;
end;

procedure TfrmTelefonkonyv.DBGrid1CellClick(Column: TColumn);
begin
Frissit;
end;

procedure TfrmTelefonkonyv.DBGrid1Enter(Sender: TObject);
begin
Frissit;
end;

procedure TfrmTelefonkonyv.DBGrid1Exit(Sender: TObject);
begin
Frissit;
end;



procedure TfrmTelefonkonyv.DBGrid1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Frissit;
end;


procedure TfrmTelefonkonyv.btnOKClick(Sender: TObject);
var
azon:integer;
s:string;

begin

if btnSzerkeszt.Enabled=true then
sqlquery1.edit
else begin
sqlquery2.Close;
sqlquery2.sql.clear;
sqlquery2.sql.Add('select max(id) from telefonkonyv;');
sqlquery2.open ;

if sqlquery2.Fields[0].Value>0 then
azon:=sqlquery2.Fields[0].Value+1
else
azon:=1;
sqlquery2.close;
sqlquery1.Append;
sqlquery1.fieldbyname('id').Value:=azon;
end;

sqlquery1.fieldbyname('nev').Value:=edtNev.Text;
sqlquery1.fieldbyname('mobil').Value:=edtMobil.Text;
sqlquery1.fieldbyname('vezetekes').Value:=edtVezetekes.Text;
if (btnSzerkeszt.Enabled=true) and (edtID.Text='') then
begin
sqlquery1.cancel;
showmessage('Nincs kijelölt sor!');
exit;
end ;


try
sqlquery1.post;
except
showmessage('Sikertelen adatbevitel!');
sqlquery1.Refresh;
//sqlquery1.close;
//sqlquery1.Open;
end;
torol;

end;


procedure TfrmTelefonkonyv.btnMegsemClick(Sender: TObject);
begin
Torol;
end;

procedure TfrmTelefonkonyv.btnSzerkesztClick(Sender: TObject);
begin
engedelyez;
edtID.ReadOnly:=True;
btnUj.Enabled:=false;
btnTorles.Enabled:=False;
Frissit;
end;

procedure TfrmTelefonkonyv.btnTorlesClick(Sender: TObject);
begin
if MessageDlg('Törli a rekordot?', mtConfirmation, mbYesNoCancel, 0) <> mrYes then
Abort
else begin
sqlquery2.close;
sqlquery2.SQL.Clear;
sqlquery2.SQL.Add('Delete from telefonkonyv where id=:id');
try
sqlquery2.ExecSQL;
except
Showmessage('A rekord nem törölhető!');
sqlquery2.cancel;
end;
sqlquery1.close;
sqlquery1.open;
end;
end;

initialization
{$I utelefonkonyv.lrs}

end.

Válasz:MYSQL alap 2010 nov. 25 09:03 #646

  • harrichy
  • harrichy profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 44
  • Köszönetek: 0
sziasztok kezdek kicsit boldogulni az sql-el,de volna egy problémám
Egy saját function-al szeretnék beszúrni egy táblába:

unit Unit1;



type

{ TForm1 }

TForm1 = class(TForm)

FUNCTION BESZUR(AA:TSQLQUERY;BB,CC,DD:STRING):STRING;




FUNCTION tform1.BESZUR(AA:TSQLQUERY;BB,CC,DD:STRING):STRING;
begin
AA.Close;
AA.sql.clear;
AA.SQL.TEXT:=('insert '+BB+' set '+CC+'='+QUOTEDSTR(DD)+';');
AA.ExecSQL;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
BESZUR(SQLQUERY1,'PROBA','ADAT1','ADAT1');
end;

a erre azért volna szükségem,mert elég sok rekordot kell beszúrnom ezért szerettem volna egyszerűsíteni a dolgoz.
Idáig működik is a dolog,de úgy kellene működjön ,hogy a CC és DD tömb legyen..
Tud valaki megoldást?

Válasz:MYSQL alap 2010 aug. 12 16:31 #573

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 504
  • Köszönetek: 86
Így nem is fog menni, mert az SQLQuery1.SQL.Text-nek átadott string-ben azt feltételezed az SQL-ről, hogy ismeri a pascalban deklarált szam és szoveg változókat... amiket persze nem ismerhet (+az sql kérésből hiányzik a SET és a végéről egy záró-zárójel is):

szoveg:='quka'; //
szam:=123;
SQLQuery1.SQL.Text:='INSERT INTO ttabla (nev,datum,szoveg,szam) VALUES (''jakab'',DATE,szoveg,szam'';


A paraméterekben a pascal változók tartalmát kell átadni és nem a nevét, valahogy így:

'quka'; //
szam:=123;
SQLQuery1.SQL.Text:='INSERT INTO ttabla SET (nev,datum,szoveg,szam) VALUES (''jakab'',DATE,'#39+szoveg+#39','#39+IntToStr(szam)+#39' ) ';

szerk: az IntToStr() eljárást a SysUtils unit tartalmazza
szerk2: ha a ttable szintén pascal-ban deklarált változó akkor természetesen annak helyére idézőjelek (#39) közé téve kell a tábla nevét beszúrni. (ahogy a quka változó értékénél látható).
Ha jól sejtem akkor az SQL-nek ezt a parancsot akarod adni:
INSERT INTO 'tablaneve' SET (nev,datum,szoveg,szam) VALUES ('jakab',DATE,'quka','123' )
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

Válasz:MYSQL alap 2010 aug. 10 21:58 #571

  • Lazaruszki
  • Lazaruszki profilkép
  • Új tag
  • Új tag
  • Hozzászólások: 9
  • Köszönetek: 0
Hali,

nekem is ez hozta meg a kedvemet
wiki.lazarus.freepascal.org/MySQLDatabases

...elötte VisualFoxban programoztam (dbf,dbc) de ez teljesen más ága ez evoluciónak :(

ÁM, ami szerimtem ,majd Neked is fejtörést okoz:

HOgyan lehet INSERT INTO-val változóból adtbázisba értéket bevinni?

pl.

szoveg:='quka'; //
szam:=123;

SQLQuery1.SQL.Text:='INSERT INTO ttabla (nev,datum,szoveg,szam) VALUES (''jakab'',DATE,szoveg,szam')';
SQLQuery1.ExecSQL;
SQLQuery1.Close;


...gondoltam ez így majd müködik, de nem:(

Ja meg kérdés, hogy az SQLQuery1.SQL.Text helyett nem-e az SQLQuery1.InsertSQL kell-e használni?...és vajon a DATE függvényt lehet-e igy alkalmazni?


ha van valakinek egy minta forrás fájlja mysql-es adatbázis kezeléshez, tele nyalánkságokkal, szívesen bele néznék..:)

MYSQL alap 2010 aug. 10 15:07 #569

  • harrichy
  • harrichy profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 44
  • Köszönetek: 0
Sziasztok

Eddig dbf adattáblákat használtam,mostantól át kell állnom Mysql
adatbáziskezelésre.Sosem használtam ilyet,ha valaki tud valami jól használható leírást vagy példaprogramot ,nagyon megköszönném.

Próbálkoztam dbgrid-en egy tábla megjelenítésével,nem sok sikerrel
idáig jutottam
Tmysql50connection1-nél sikerült beállítani a kapcsollatot,ez biztosan működig,mert ha megváltoztatot a jelszót akkor hibát jelez.
SQLTransaction1.database :mysqlconnection1
datasource1.dataset :sqlquery1
sqlquery1.database :mysql50connection1
sqlquery1.sqltransation :sqltransation1
dbgrid1.datasource :datasource1
de ha a query1 active-t true -ra akarom állítani akkor hibát jelez.gondolom valahol meg kell adni a megjelenítend tábla nevét.
Remélem tudtok segíteni.

  • Oldal:
  • 1