Ga naar inhoud

[Delphi] MDI-applicatie vraag


anoniem

Aanbevolen berichten

[quote:2c2bc654d9="h4xX0r"][quote:2c2bc654d9="George W. Bush"]Het is me gelukt zonder auto nummering. De procedure is nu als volgt: [code:1:2c2bc654d9] procedure TKlantenForm.ToolButton1Click(Sender: TObject); var KlantNR: Integer; begin [b]If[/b] not KlantenTabel.Eof [b]then[/b] KlantenTabel.Last; KlantenTabel.Insert; KlantIDQuery.Open; KlantNR := KlantIDQuery.FieldByName('KlantID').AsInteger; DBEdit1.text := IntToStr(KlantNR+1); DBEdit12.text := 'Nederland'; DBEdit25.text := FormatDateTime('dd-mm-yyyy',Date); end; [/code:1:2c2bc654d9] Nu weer verder klooien naar het volgende knelpunt! :)[/quote:2c2bc654d9] En nu wordt je applicatie ook door een andere gebruiker opgestart en deze wil op hetzelfde moment ook een Klant toevoegen. Tsjakka.... :D You have been warned 8)[/quote:2c2bc654d9] 8) laat hem toch fijn een proggie maken voor z'n bedrijfje... ik vind het heel goed gaan anders, dat soort dingen komen later wel.
Link naar reactie
  • Reacties 72
  • Aangemaakt
  • Laatste reactie

Beste reacties in dit topic

[quote:9b17e90d26="George W. Bush"][quote:9b17e90d26="Johan Stokking"] Wat gebruik je, de TZMySqlQuery of the TZMySqlTable? Zet je de data in een Grid?[/quote:9b17e90d26] Ik gebruik nu TZMySqlTable en zet elk veld in een apart DBEdit veld. Voor screenshot: [url=http://www.dbgardenproducts.nl/screenshots/screenshot1.gif]Klik hier[/url][/quote:9b17e90d26] Waar haal je trouwens die stoere plaatjes vandaan? :lol:
Link naar reactie
[quote:5d79c322f9="George W. Bush"]Die plaatjes heb ik deels zelf gemaakt in Paint Shop Pro en deels van andere website (bijv. Google image-search). Tenslotte heb ik ze een donkertintje gegeven in Paint Shop Pro. PS: Kan nu klanten toevoegen, en verwijderen. Nu nog werken aan het probleem als er twee tegelijk een nieuwe klant willen aanmaken.[/quote:5d79c322f9] Haha, dan moet je hem exclusief openen, dan kan niemand anders hem openen (alleen read-only) maar dat is niet handig, er is wel iets voor. Ga ik wel ff uitzoeken. Welk thema heb je eigenlijk voor Windows XP? Of heb je al Windows .NET?
Link naar reactie
[quote:28c7f161cd="Johan Stokking"]En als Haxxor nog een idee heeft... er wordt hier gewerkt met de ZEOS Library ( http://www.zeoslib.org/ ) en het lijkt me wel dat die al rekening houdt met dit soort conflicten....[/quote:28c7f161cd] Dit hoeft geen conflict op te leveren (tenzij je de hoogste isolation level gebruikt). Dit is naar mijn mening gewoon een design fout. Ik weet niet in hoeverre MySQL tegenwoordig uitblinkt in transacties, maar het volgende zou in de praktijk voor kunnen komen... [code:1:28c7f161cd] Transactie 1 Transactie 2 ----------------------- ------------------ BeginTrans KlantNr=GetMaxKlantId KlantNr=KlantNr+1 BeginTrans KlantNr=GetMaxKlantId KlantNr=KlantNr+1 Insert Into .... Commit Insert Into ... Commit [/code:1:28c7f161cd] En dan hangt het van de database design af wat er gebeurt bij de tweede INSERT. Als het goed is dan is het veld KlantId een uniek veld en zou dit een error op moeten leveren. Zoniet, dan heb je nu twee records met hetzelfde KlantId. 8)
Link naar reactie
[quote:92b4bf1f27="h4xX0r"][quote:92b4bf1f27="Johan Stokking"]En als Haxxor nog een idee heeft... er wordt hier gewerkt met de ZEOS Library ( http://www.zeoslib.org/ ) en het lijkt me wel dat die al rekening houdt met dit soort conflicten....[/quote:92b4bf1f27] Dit hoeft geen conflict op te leveren (tenzij je de hoogste isolation level gebruikt). Dit is naar mijn mening gewoon een design fout. Ik weet niet in hoeverre MySQL tegenwoordig uitblinkt in transacties, maar het volgende zou in de praktijk voor kunnen komen... [code:1:92b4bf1f27] Transactie 1 Transactie 2 ----------------------- ------------------ BeginTrans KlantNr=GetMaxKlantId KlantNr=KlantNr+1 BeginTrans KlantNr=GetMaxKlantId KlantNr=KlantNr+1 Insert Into .... Commit Insert Into ... Commit [/code:1:92b4bf1f27] En dan hangt het van de database design af wat er gebeurt bij de tweede INSERT. Als het goed is dan is het veld KlantId een uniek veld en zou dit een error op moeten leveren. Zoniet, dan heb je nu twee records met hetzelfde KlantId. 8)[/quote:92b4bf1f27] Jah dat moet niet :D Die ZEOS Library heeft een eigen Transact component en ik denk niet dat dit zomaar kan gebeuren, ze zijn nie helemaal gek...
Link naar reactie
Nee, dit kan je het besten doen eigenlijk met een MySQL Query. Als de klant intikt als Klantnummer 1, dan krijg je dit als query: [code:1:4ad8962cba] SELECT * FROM tabel WHERE (KlantID="1"); [/code:1:4ad8962cba] En met een bedrijfsnaam: [code:1:4ad8962cba] SELECT * FROM tabel WHERE (bedrijfsnaam="bedrijf"); [/code:1:4ad8962cba] Tabel moet je vervangen voor de naam van de tabel, en KlantID en bedrijfsnaam vervangen voor de kolom-namen. Allebei kan ook: [code:1:4ad8962cba] SELECT * FROM tabel WHERE (KlantID="1") AND (bedrijfsnaam="bedrijf"); [/code:1:4ad8962cba] Deze sql queries kan je uitvoeren dmv deze tekst te kopieren naar de ZMySqlQuery.Sql (TStrings), en dan met de Transact de functie ExecSql aanroepen [b:4ad8962cba]of[/b:4ad8962cba] Active van ZMySqlQuery of True zetten. Succes!
Link naar reactie
Hoe kan die where KlantID=[b:b5fc533a64]1[/b:b5fc533a64] opgeven als variabel. Want de waarde voor die een wordt door de gebruiker ingevuld bij het zoeken (het trefwoord waar je op zoekt een bedrijfsnaam en/of klantennummer). De bedoeling is dus een tekstveld waar je de bedrijfsnaam kan invullen en een tekstveld waar je het KlantID kan invullen. Als een van de twee of alle twee zjn ingevuld druk je op een knop en moeten de resultaten worden getoond. (de knop 'stopt' het trefwoord in de Query en zoekt het juiste record) Snap je het nog? :)
Link naar reactie
Snap het in één keer :D Oke, ik neem aan dat je twee TEdit en een TButton hebt op je Form, edtKlantID, edtBedrijfsnaam en btnZoeken. [code:1:c8f0b88799] procedure TfrmMain.btnZoekenClick(Sender: TObject); var SQL: String; begin // dit is alleen een begin, geen geldige SQL query!! SQL := 'SELECT * FROM tabel WHERE'; // kijken of het niet niets is... if (Trim(edtKlantID.Text) <> '') and (Trim(edtBedrijfsnaam.Text) <> '') then SQL := SQL+' (KlantID="'+Trim(edtKlantID.text)+'") AND (Bedrijfsnaam="'+Trim(edtBedrijfsnaam.Text)+'");'; if (Trim(edtKlantID.Text) <> '') and (Trim(edtBedrijfsnaam.Text) = '') then SQL := SQL+' (KlantID="'+Trim(edtKlantID.Text)+'");'; if (Trim(edtBedrijfsnaam.Text) <> '') and (Trim(edtKlantID.Text) = '') then SQL := SQL+' (Bedrijfsnaam="'+Trim(edtBedrijfsnaam.Text+'");'; end; [/code:1:c8f0b88799] Trim gebruik je om o.a. spaties voor en achter weg te halen, [i:c8f0b88799]als er bijvoorbeeld alleen een spatie staat wordt het beschouwt als niets[/i:c8f0b88799]. Je kijkt dus eerst of er allebei iets in staat en daarna of er per stuk iets in staat. Als het goed werkt het, ik heb het niet gecontroleerd. Als je er iets tussen wilt gaan zetten, zet er dan ook [b:c8f0b88799]begin[/b:c8f0b88799] en [b:c8f0b88799]end[/b:c8f0b88799] bij anders raakt de compiler in de war en loopt het programma niet goed meer. Succes! :D
Link naar reactie
[quote:539be4321b="Johan Stokking"] [code:1:539be4321b] procedure TfrmMain.btnZoekenClick(Sender: TObject); var SQL: String; begin // dit is alleen een begin, geen geldige SQL query!! SQL := 'SELECT * FROM tabel WHERE'; // kijken of het niet niets is... if (Trim(edtKlantID.Text) <> '') and (Trim(edtBedrijfsnaam.Text) <> '') then SQL := SQL+' (KlantID="'+Trim(edtKlantID.text)+'") AND (Bedrijfsnaam="'+Trim(edtBedrijfsnaam.Text)+'");'; if (Trim(edtKlantID.Text) <> '') and (Trim(edtBedrijfsnaam.Text) = '') then SQL := SQL+' (KlantID="'+Trim(edtKlantID.Text)+'");'; if (Trim(edtBedrijfsnaam.Text) <> '') and (Trim(edtKlantID.Text) = '') then SQL := SQL+' (Bedrijfsnaam="'+Trim(edtBedrijfsnaam.Text+'");'; end; [/code:1:539be4321b] Succes! :D[/quote:539be4321b] Er zit toch nog een foutje in, ik krijg in de laatste regel de volgende error: [i:539be4321b]excepted but ';' found[/i:539be4321b] En hoe kan ik de resulaten op het KlantenForm weergeven, het zoek formlier is namelijk een klein formpje met twee TEdit velden erop?
Link naar reactie
[quote:e56784a9b1="George W. Bush"][quote:e56784a9b1="Johan Stokking"] [code:1:e56784a9b1] procedure TfrmMain.btnZoekenClick(Sender: TObject); var SQL: String; begin // dit is alleen een begin, geen geldige SQL query!! SQL := 'SELECT * FROM tabel WHERE'; // kijken of het niet niets is... if (Trim(edtKlantID.Text) <> '') and (Trim(edtBedrijfsnaam.Text) <> '') then SQL := SQL+' (KlantID="'+Trim(edtKlantID.text)+'") AND (Bedrijfsnaam="'+Trim(edtBedrijfsnaam.Text)+'");'; if (Trim(edtKlantID.Text) <> '') and (Trim(edtBedrijfsnaam.Text) = '') then SQL := SQL+' (KlantID="'+Trim(edtKlantID.Text)+'");'; if (Trim(edtBedrijfsnaam.Text) <> '') and (Trim(edtKlantID.Text) = '') then SQL := SQL+' (Bedrijfsnaam="'+Trim(edtBedrijfsnaam.Text+'");'; end; [/code:1:e56784a9b1] Succes! :D[/quote:e56784a9b1] Er zit toch nog een foutje in, ik krijg in de laatste regel de volgende error: [i:e56784a9b1]excepted but ';' found[/i:e56784a9b1] En hoe kan ik de resulaten op het KlantenForm weergeven, het zoek formlier is namelijk een klein formpje met twee TEdit velden erop?[/quote:e56784a9b1] Sorry sorry :D Dit moet de code zijn: [code:1:e56784a9b1] procedure TfrmMain.btnZoekenClick(Sender: TObject); var SQL: String; begin // dit is alleen een begin, geen geldige SQL query!! SQL := 'SELECT * FROM tabel WHERE'; // kijken of het niet niets is... if (Trim(edtKlantID.Text) <> '') and (Trim(edtBedrijfsnaam.Text) <> '') then SQL := SQL+' (KlantID="'+Trim(edtKlantID.text)+'") AND (Bedrijfsnaam="'+Trim(edtBedrijfsnaam.Text)+'");'; if (Trim(edtKlantID.Text) <> '') and (Trim(edtBedrijfsnaam.Text) = '') then SQL := SQL+' (KlantID="'+Trim(edtKlantID.Text)+'");'; if (Trim(edtBedrijfsnaam.Text) <> '') and (Trim(edtKlantID.Text) = '') then SQL := SQL+' (Bedrijfsnaam="'+Trim(edtBedrijfsnaam.Text)+'");'; end; [/code:1:e56784a9b1] Er mist idd nog 1 haakje.... Een apart zoekformulier is inderdaad het beste, je kan dan het beste de componenten van het Mainform gebruiken. Dus om de Query die op het Mainform staat te gebruiken doe je dit: frmMain.ZMySQLQuery.... . Waarbij frmMain de naam is van het Mainform en ZMySQLQuery de naam is van de TZMySQLQuery. Beetje vaag, maar je gebruikt dus de componenten op het Mainform die gekoppeld zijn aan de Data-aware controls (DBEdits e.d.) op het Mainform. :-? :P :wink:
Link naar reactie
Ik snap je opzet maar ik weet niet zo goed hoe ik het moet doen. Het gaat om twee Forms: KlantenForm en KlantZoekForm. KlantZoekForm wordt aangeroepen vanaf KlantenForm. Op het KlantenForm staat een Query met bij sql: SELECT * FROM klanten. De DBEdit velden op het KlantZoekForm zijn aan deQuery gekoppeld. De Zoek knop heeft de code die jij had gegeven. Resultaat: In de DBEdit velden staat doodleuk het eerste record ingevuld en als je op de Zoek knop drukt gebeurt er niks. :-? Ik weet, ik ben beginner, maar hoe los ik dit op?
Link naar reactie
[quote:b397d38806="George W. Bush"]Ik snap je opzet maar ik weet niet zo goed hoe ik het moet doen. Het gaat om twee Forms: KlantenForm en KlantZoekForm. KlantZoekForm wordt aangeroepen vanaf KlantenForm. Op het KlantenForm staat een Query met bij sql: SELECT * FROM klanten. De DBEdit velden op het KlantZoekForm zijn aan deQuery gekoppeld. De Zoek knop heeft de code die jij had gegeven. Resultaat: In de DBEdit velden staat doodleuk het eerste record ingevuld en als je op de Zoek knop drukt gebeurt er niks. :-? Ik weet, ik ben beginner, maar hoe los ik dit op?[/quote:b397d38806] 8) ik ben ook zo begonnen hoor...toen was ik 11 met een computer en Turbo Pascal :D en na 4 jaar kan ik je met het meeste al helpen, dit is overigens niet m'n "specialiteit" hoor. Als je een programma maakt, heb je een main-form. Dit heet zo, omdat het het belangrijkste form is in de applicatie. Op dit Mainform (noemt de programmeur meestal MainForm of frmMain (zoals ik)) zet je de componenten die je in je programma gebruikt (ook in andere forms), zoals de ZMySqlDatabase/Transact/Query. In de OnCreate van het Mainform maak je verbinding (d.m.v. de functie Connect in de TZMySqlDatabase), en met OnClose verbreek je de verbinding weer. Andere forms die gebruik maken van een database (in jouw geval KlantZoekForm), moeten gebruik maken van de MySQL componenten op het main-form. Met andere woorden: zet geen MySQL componenten op het KlantZoekForm. Variabelen/constanten/procedures/functies/componenten die op een ander form staan kan je gewoon gebruiken, dit gaat zo: <naam van het form>.<naam van variabel/constant/procedure/functie/component> Let op: hierbij moet de betreffende unit wel bij uses staan, Delphi vraagt hier automatisch om. Nu denk je vast: wat heb hier aan? Dit is voor een beginner een belangrijk onderdeel van object georiënteert programmeren... Hier heb je écht wat aan: - Haal alle MySQL componenten weg van alle forms en verplaats ze naar het main-form. - Dit moet er staan bij btnZoek (de zoek-knop op het KlantZoekForm): [code:1:b397d38806] procedure TfrmMain.btnZoekenClick(Sender: TObject); var SQL: String; begin SQL := 'SELECT * FROM tabel WHERE'; if (Trim(edtKlantID.Text) <> '') and (Trim(edtBedrijfsnaam.Text) <> '') then SQL := SQL+' (KlantID="'+Trim(edtKlantID.text)+'") AND (Bedrijfsnaam="'+Trim(edtBedrijfsnaam.Text)+'");'; if (Trim(edtKlantID.Text) <> '') and (Trim(edtBedrijfsnaam.Text) = '') then SQL := SQL+' (KlantID="'+Trim(edtKlantID.Text)+'");'; if (Trim(edtBedrijfsnaam.Text) <> '') and (Trim(edtKlantID.Text) = '') then SQL := SQL+' (Bedrijfsnaam="'+Trim(edtBedrijfsnaam.Text)+'");'; if frmMain.sqlQuery.Active then frmMain.sqlQuery.Active := False; frmMain.sqlQuery.Sql.Text := SQL; try frmMain.sqlQuery.Active := True; except ShowMessage('Er is een fout opgetreden tijdens het uitvoeren van de volgende SQL-query:'+#13+#10+SQL); end; end; [/code:1:b397d38806] Je gebruikt dus de sqlQuery (TZMySqlQuery) op het main-form (frmMain). Dit is handig, omdat je dus niet verschillende verbindingen hebt met de server die open blijven staan e.d. Overzichtelijk houden van je programma's is heel belangrijk. Wat een gelul... :D
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in


×
×
  • Nieuwe aanmaken...