Pridadenie maxima do premennej a pridanie zaznamov do DB – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Pridadenie maxima do premennej a pridanie zaznamov do DB – MySQL – Fórum – Programujte.comPridadenie maxima do premennej a pridanie zaznamov do DB – MySQL – Fórum – Programujte.com

 

lusia0
Duch
18. 3. 2016   #1
-
0
-

Caute, robim databazu v Delphi, v ktorej vyuzivam SQL prikazy cez komponent QUERY. 

Mam jednu tabulku s nazvom data a stlpce ID, Datum, Bod, X,Y,Z,Standard_X, USL_X, LSL_X,,Standard_Y, USL_Y, LSL_Y,,Standard_Z, USL_Z, LSL_Z.

Tlacitko na vypocet maxima a naplnanie stringgridu.

procedure THistogram.Button2Click(Sender: TObject);
var n,i,k: Integer;
 h :Extended ;
begin
 h:=0;
VW.Query1.RequestLive:= False ;
VW.Query1.Open;
VW.Query1.SQL.Add('Select Max(X) as maxi from data');
VW.Query1.ExecSql;
h := VW.Query1.FieldByName('maxi').AsFloat;
        ShowMessage(FloatToStr(h));
n:=VW,Query1.RecordCount;
k:=Round(sqrt(n));

Stringgrid1.RowCount:=k+1;
 StringGrid1.Cells[0,0]:='id';
 StringGrid1.Cells[1,0]:='zaciatok int.';
 StringGrid1.Cells[2,0]:='koniec int.';
 StringGrid1.Cells[3,0]:='stred';
 StringGrid1.Cells[4,0]:='pocetnost';
   for i:=1 to k+1 do
    StringGrid1.Cells[0,i]:=IntToStr(i);
end;

Chyba: Po stlaceni tlacitka pise chybu: 

Připojen obrázek.

Cielom tohto tlacitka je vytvorit tabulku, ktora bude obsahovat stlpce: ID, zac.int., koniec int., stred, pocetnost. A z poslednych dvoch stlpcov stred a pocetnost chcem vytvorit histogram. 

Ocenila by som pomoc aj pri tomto. Problem s Max je len medzikrok pomocou, ktoreho chcem vypocitat sirku intervalu. 

Procedura na vkladanie akcnych dotazov.

procedure TPridaj.UrobSQL(prikazSQL: String);
Var
  Query: TQuery;

begin

  Query := TQuery.Create(nil);

  Query.SQL.Add(prikazSQL);
  Query.ExecSQL;
  Query.Free;
end;

Tlačítko, ktore vklada zaznamy do data. 

Toto tlacitko ma vkladat dva zaznamy naraz, ktore maju rovnaky datum a nazov bodu, ostatne stlpce sa odlisuju. Tlacitko je umiestnene na inom formulari (formular Pridaj) ako je tabulka (Formular VW)

Připojen obrázek.

.

procedure TPridaj.Button2Click(Sender: TObject);
var datep:Tdatetime; X,Z,Y,X2,Y2,Z2,i:Integer; bod:String;
begin

X:=StrToInt(Edit1.Text);
Y:=StrToInt(Edit2.Text);
Z:=StrToInt(Edit3.Text);
X2:=StrToInt(Edit4.Text);
Y2:=StrToInt(Edit5.Text);
Z2:=StrToInt(Edit6.Text);
datep:=Strtodatetime(Datum.text);
UrobSQL('INSERT INTO data (Datum,BOD,X,Y,Z) VALUES
  (datetostr(datep),("+VW.ComboBox1.Text+"),X,Y,Z),
 (datetostr(datep),"VW.ComboBox1.Text",X2,Y2,Z2)');

Chyby:

  1.  Unterminated string
  2. Missing operator or semicolon
  3. [Error] Unit4.pas(85): Illegal character in input file: '"' ($22

Urcite mam chyby v syntaxe. Viete mi poradit ako pouzivat proceduru UrobSQL ? Tuto proceduru nemam z vlastnej hlavy, takze neviem celkom dobre ako do nej zadavat prikazy. Bolo mi povedane, ze sluzi na zadavanie akcnych dotazov. 

Nahlásit jako SPAM
IP: 178.143.150.–
peter
~ Anonymní uživatel
3982 příspěvků
18. 3. 2016   #2
-
0
-

Dobre je sql prikazy psat velkymi a sloupce malymi pismeny. A kdyz to jde, formatovat to krasne pod sebe. A nevim, jestli to delphi umi, ale jmena sloupcu je dobre davat do zpetnych uvozovek, aby se odlisilo klicove slovo, funkce sql od nazvu sloupce. A kdyz delas vic prikazu, tak je nutne davat na konci strednik. Pripadne mozna si projit nejaky example s tim pluginem, jak to tam zapisuji.

Select Max(X) as maxi from data

SELECT
  Max(`x`) AS `maxi`
FROM
  `data`

chyba1 "Invalid use of the keyword Token"
http://stackoverflow.com/…rd-in-tquery
Takze ty apostrofy nakonec jinak, uvadi tam ten priklad s tim where

select * from Journal where Journal."where" = "RainPump"

query = '
SELECT
  Max("x") AS "maxi"
FROM
  "data"
';

"Unterminated string" 

https://translate.google.com/#en/cs/Unterminated%20string
neukončený řetězec
 

google = delphi TQuery  syntax

'INSERT INTO data (Datum,BOD,X,Y,Z) VALUES
  (datetostr(datep),("+VW.ComboBox1.Text+"),X,Y,Z),
 (datetostr(datep),"VW.ComboBox1.Text",X2,Y2,Z2)'

'..."+...+"..."..."...' - nevi, co se snazis dvojitymi uvozovkami docilit
myslim si, ze ty uvozovky mas uplne jinak

query = '
INSERT INTO "data"
  ("datum","bod","x","y","z")
VALUES
  ("{0}","{1}",{2},{3},{4}), -- predpokladam, ze datum i text je typu string, ostatni cisla
  ("{0}","{1}",{5},{6},{7})
';
// a ted bych na to pouzil nejaky replace nastroj, ktery %+cislo nahradi hodnotou z pole
query = StringReplace(query, '{0}', 'ddd', [rfReplaceAll]);
query = StringReplace(query, '{1}', 'ddd', [rfReplaceAll]);

Verim, ze tam existuje elegantnejsi cesta. V php by se pouzilo vsprintf nebo str_replace, ktere umi pracovat i s array
http://php.net/…vsprintf.php
http://php.net/…-replace.php

Tez pomaha si ten sql prikaz vypsat na obrazovku, at vidis, co do sql posilas.

Nahlásit jako SPAM
IP: 2001:718:2601:26c:a1f2:83...–
18. 3. 2016   #3
-
0
-

V Delphi se doporučuje FireDAC. Jinak co se týče "vepisování" hodnot do sql query, můžeš použít metodu ParamByName, doporučuji nápovědu Delphi, popř. příklady. http://docwiki.embarcadero.com/…s_in_Queries

Gůůůgli query s parametry v Delphi

hu

Nahlásit jako SPAM
IP: 195.178.67.–
18. 3. 2016   #4
-
0
-

K ladění: dej si breakpoint na volání metody Open() a prohlídni si, co do DB posíláš, jestli je to syntakticky správně. Pro odladění samotného dotazu doporučuji použít MySQL Workbench nebo řádkového klienta.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
18. 3. 2016   #5
-
0
-

   

FDQuery1->SQL->Text = "Select idClient, nameClient from jadra where ( idClient = :id AND nameClient = :name) ;";

FDQuery1->ParamByName("id")->AsInteger = kIdentifikaci.front()->ID;
FDQuery1->ParamByName("name")->AsString = kIdentifikaci.front()->prijem.pdata;

Jsem našel nějaký zdroják jak jsem to dělal u C++ Builderu (příbuzný Delphi). Když místo -> (šipky) napíšeš . (tečku), mělo by to být Delphi.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý