Autor Téma: Databáze MySQL - založení, připojení  (Přečteno 1806 krát)

Offline KarlosCZ

  • Nováček
  • *
  • Příspěvků: 31
  • Karma: 0
    • Verze Delphi: xe7
Databáze MySQL - založení, připojení
« kdy: 11-06-2016, 22:13:14 »
Dobrý den,
s Pascalem a Delphi sporadicky dělám už skoro 30 let. Zabývám se (koníček) připojováním bastleného hardwaru k PC. Aktuálně jako charitu zadarmo dělám projekt, jehož nejschůdnějším řešením je použití databáze. Jenže. Já s databázemi nikdy nepracoval, moje veškeré znalosti se dají shrnout do: databáze jsou tabulky a mezi nimi jsou relační vztahy. Mám o kilometry blíž k assembleru než k sql. NEumím založit databázi, nevím, jak se k ní připojit. Kdysi jsem to zkoušel ještě s BDE někdy v Delphi 5, to šlo, bylo to klikací, ale to už v XE7 nefunguje. Což je ta zrada, se kterou jsem nepočítal. Potřebuju s tím pohnout. Doufám, že to není moc proti pravidlům, když nabídnu odměnu. Co chci: ukázat, jak založit mysql databázi, jak se k ní v XE7 připojit a základ práce s čtením a úpravou dat. Odhaduju max na hodinu práce za 1000 Kč, pokud nutno, úměrně více. Vím, že asi vypadám jako d.bil, ale má skutečná práce mě časově vytěžuje natolik, že nemám čas to lovit na netu a bastlit metodou pokus/omyl, a zároveň nechci nechat ve štychu děcka ze sportovního klubu, kterému jsem ten systém na management závodů slíbil. Střední, případně celá Morava není problém, můžu dojet kamkoliv, případně skype + teamviewer.
Díky moc předem,
Karlos

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2719
  • Karma: 26
    • Verze Delphi: XE7 professional
Re:Databáze MySQL - založení, připojení
« Odpověď #1 kdy: 11-06-2016, 22:54:26 »
http://www.heidisql.com/
https://www.mysql.com/products/workbench/
http://www.sqlmanager.net/en/tools/free
Osobne mám EMS ale pre FireBird. To je 3 odkaz. Prvé dva nepoznám - google.
A pripojíš sa pomocou FireDAC. Pozor v prefessional verzii len lokálna DB.
Citace
a základ práce s čtením a úpravou dat.
Pokiaľ Ti postačí DBGrid, tak to máš rýchlo. Ten sa Ti o to postará v kombinácii s DBNavigator a predvolených akcií pre DB.
Ja osobne som DBGrid veľmi rýchlo zavrhol, ale to som ja :)
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline KarlosCZ

  • Nováček
  • *
  • Příspěvků: 31
  • Karma: 0
    • Verze Delphi: xe7
Re:Databáze MySQL - založení, připojení
« Odpověď #2 kdy: 12-06-2016, 00:55:10 »
Díky, to jsem už všechno viděl. WorkBench jsem si stáhnul, nainstaloval, ale absolutně nechápu, jak se s tím dělá. Stejně tak FireDAC, zkoušel jsem nastavit FDConnection, nedělá to nic. Když mám připojit cokoliv přes rs232, není problém, ale tady - hic sunt leones, a to absolutně. Fakt nemám čas se to učit, proto nabízím $ někomu, kdo mi to jednou naživo ukáže, i když to je v podstatě asi banální - to je ale assembler taky ;)

Offline KarlosCZ

  • Nováček
  • *
  • Příspěvků: 31
  • Karma: 0
    • Verze Delphi: xe7
Re:Databáze MySQL - založení, připojení
« Odpověď #3 kdy: 05-07-2016, 16:52:18 »
Dobrý den, po čase jsem se dostal k tomu projektu. Podařilo se mi připojit mdb soubor, dokážu vyhledat max a min záznam v požadované tabulce, ale kolabuju na konkrétním dotazu. Jakmile použiju:

iID := dbMain.ExecSQLScalar('select indexnr from judokas where plr_lname = :xyz');
indexnr je číslo osoby
plr_lname je příjmení osoby
xyz by mělo být konkrétní příjmení v textové podobě, podle které se vyhledá odpovídající indexnr

tak dostanu chybu Parameter [xyz] data type is unknown. Hint: specify TFDParam.DataType or assign TFDParam value before Prepare/Execute call

Prosím, co dělám špatně?
Díky moc.


Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1080
  • Karma: 36
    • Verze Delphi: 7, 2010
Re:Databáze MySQL - založení, připojení
« Odpověď #4 kdy: 05-07-2016, 17:44:09 »
Nemá být "xyz" jako string v uvozovkách? ('xyz') ... zdvoj ty uvozovky, aby byly v Delphi jako string

Offline KarlosCZ

  • Nováček
  • *
  • Příspěvků: 31
  • Karma: 0
    • Verze Delphi: xe7
Re:Databáze MySQL - založení, připojení
« Odpověď #5 kdy: 05-07-2016, 19:11:25 »
je tam třeba zdvojit apostrofy, díky, super nápad. Totéž ale nefunguje, když ten dotaz otočím:

'select plr_lname from judokas where Member number = ''56886''

vznikne syntaktická chyba chybí operátor v dotazovém výrazu. Zkoušel jsem různé varianty apostrofů a uvozovek a nene. Snad někdo víte, o co jde, já vůbec.

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1080
  • Karma: 36
    • Verze Delphi: 7, 2010
Re:Databáze MySQL - založení, připojení
« Odpověď #6 kdy: 05-07-2016, 19:29:25 »
"where Member number" mi nepřipadá moc správně ;)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2719
  • Karma: 26
    • Verze Delphi: XE7 professional
Re:Databáze MySQL - založení, připojení
« Odpověď #7 kdy: 05-07-2016, 20:27:02 »
Mne to pripadá celé divné.
Kód: [Vybrat]
iID := dbMain.ExecSQLScalar('select indexnr from judokas where plr_lname = :xyz');Dávaš vykonať príkaz a máš tam parameter. Ja používam takýto postup:
Kód: [Vybrat]
  MyQuery := TFDQuery.Create(Self);  // Self = formulár. Nech sa nestarám o uvoľnenie.
  MyQuery - komplet nastaviť pripojenie k DB
  MyQuery.SQL.Add('select indexnr from judokas where plr_lname = :xyz');
  MyQuery.ParamByName('xyz').AsString := 'Janko Hraško';
  MyQuery.Open();
  iID := MyQuery.Fields.Fields[0].AsInteger;  // Alebo podľa názvu poľa.
  MyQuery.Close;

  MyQuery .SQL.Clear;
  MyQuery.SQL.Add('select plr_lname from judokas where MemberNumber = :IDMember);
  MyQuery.ParamByName('IDMember').AsInteger := 56886;

  try  // Hore tak isto.
    MyQuery.Open();
    sName:= MyQuery.Fields.Fields[0].AsString ;  // Alebo podľa názvu poľa.
  finally
    MyQuery.Close;
  end;
Transakcia musí byť aktívna. Na tvorbu FD komponentov mám funkcie. Tak mám v kóde jediný riadok.
« Poslední změna: 05-07-2016, 20:29:43 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline KarlosCZ

  • Nováček
  • *
  • Příspěvků: 31
  • Karma: 0
    • Verze Delphi: xe7
Re:Databáze MySQL - založení, připojení
« Odpověď #8 kdy: 05-07-2016, 21:51:43 »
Moc si vážím toho, že se mi snažíte pomoct, ale mluvíme na sebe každý jiným jazykem. Já rozumím slovům co píšete jednotlivě, dohromady mi to ale nedává žádný smysl. :)
Rozchodil jsem si připojení k mdb tím, že jsem rozkuchal příklad. Fakt nechápu, proč se k tomu nedá přistoupit jako ke kdejakému souboru. Prostě mám soubor, v něm tabulky, z té a té vytáhni to a to. Tři řádky kodu tops. Ale to je na jinou debatu (např. c vs basic na ATM mikrokontrolerech).
tady je co mi funguje + sshot té tabulky judokas v libreoffice.
Já ale potřebuju vyhledat jméno podle sloupce Member number (s mezerou je ten sloupec už v té databázi). S tím Indexnr to funguje, jakmile ho zaměním za Member number tak ne. Už mi z toho hrabe.  :o  :-[

procedure TfrmGettingStarted.cbConnDefsClick(Sender: TObject);
begin
    with dbMain do begin Close;
     with Params do begin
      Clear;
      Add('DriverID=MSAcc');
      Add('Database=' + 'tournaments.mdb');
     end;
    end;
dbmain.GetTableNames('','','',ListBox1.Items, [osMy], [tkTable]);
end;

procedure TfrmGettingStarted.btnInsertClick(Sender: TObject);
var
  jmeno: string;
begin
  if not dbMain.Connected then Exit;
  jmeno:= dbMain.ExecSQLscalar('select plr_lname from judokas where indexnr = 503696');
  showmessage (jmeno); //funguje
end;
end;

procedure TfrmGettingStarted.btnCompactClick(Sender: TObject);
var
  sDb: String;
begin
  sDb := edtDatabase.Text;
  if sDb = '' then
    Exit;
end;

procedure TfrmGettingStarted.btnCreateDBClick(Sender: TObject);
var
  sDb: String;
begin
  sDb := edtDatabase.Text;
  if sDb = '' then
    Exit;
  if not FileExists(sDb) then
    with accService do begin
      Database := sDb;
      CreateDB;
    end
  else
    ShowMessage('Database already exists!');
end;

procedure TfrmGettingStarted.btnOpenClick(Sender: TObject);
begin
  edtDatabase.Text := 'tournaments.mdb';
end;
end.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2719
  • Karma: 26
    • Verze Delphi: XE7 professional
Re:Databáze MySQL - založení, připojení
« Odpověď #9 kdy: 05-07-2016, 22:10:36 »
Access umožňuje v názvoch diakritiku. Čiže aj medzery. Iné DB by Ti hneď vynadali. Ale je nezmysel to používať. Takéto názvy musíš dávať do buď apostrofov či uvodzoviek. Neviem z hlavy.

Ak máš k dispozícii Access, tak si ten dopyt vytvor priamo v ňom. Tam budeš mať správny syntax. Aj keď tam sú nejaké výnimky, pre/pri skopírovanie do Delphi, ale to si už naozaj nepamätám. Potom si zobraz SQL a skopíruj ho do Delphi. Tam si ho môžeš upraviť podľa potreby. Ja som presne takto začínal.
Keby sa tie polia dali premenovať, tak to urob.

Ešte odporúčania na začiatok:

Daj si do projektu DataModul a naň hoď
 - komponenty pre pripojenie k DB. Connection a Transaction. Teraz to nerieš programovo a ani neošetruj rôzne stavy. Je toho naraz veľa a veľmi ľahko sa zamotáš. Chce to malé krôčky.
 - FDTable - priama práca s tabuľkou
 - FDQuery - na vrátenie DataSet. Na nič iné to nepoužívam. Aj keď tam tá možnosť je.
 - FDCommand - vykonanie SQL, ktoré nevracajú DataSet (Insert, Update, Delete)

A až to zvládneš a budeš vedieť o čo ide, tak si ich môžeš začať vytvárať dynamicky.


 
« Poslední změna: 05-07-2016, 22:14:21 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline KarlosCZ

  • Nováček
  • *
  • Příspěvků: 31
  • Karma: 0
    • Verze Delphi: xe7
Re:Databáze MySQL - založení, připojení
« Odpověď #10 kdy: 05-07-2016, 23:14:28 »
No já se zvencnu. Uvozovky. Díky! ;D

Offline KarlosCZ

  • Nováček
  • *
  • Příspěvků: 31
  • Karma: 0
    • Verze Delphi: xe7
Re:Databáze MySQL - založení, připojení
« Odpověď #11 kdy: 06-07-2016, 02:41:44 »
Dobrý večer, mám to komplet. Díky všem. Jinak, vidět tohle: https://www.youtube.com/watch?v=k8pGVnNHflE měl bych vyřešeno už před měsícem. :o

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Upozornění: do tohoto tématu bylo naposledy přispěno před 120 dny.
Zvažte prosím založení nového tématu.

Jméno: E-mail:
Ověření:
Křestní jméno zpěváka Gotta: