(Delphi) --> MySQL gelukt! Nu volgend probleem:

Pagina: 1
Acties:
  • 101 views sinds 30-01-2008
  • Reageer

  • active2
  • Registratie: Juni 2001
  • Laatst online: 13-09 21:19

active2

Google is your friend

Topicstarter
Het is me gelukt om met Delphi met MySQL te kunnen communiceren! :):):) Ikke erg blij!!!! :)

Maar nu het volgende probleem:

Als ik nu een Query in delphi maak voor SQL dan krijg ik van die vreemde dingen:

In een editbox krijg je een string aangeleverd en als je die in een SQL query plakt dan verwijdert die dus niks in de database. Nou weet ik gelukkig wat er aan de hand is maar ik kan het niet oplossen ik weet niet waar ik zoeken moet.

Dit is de string die ik in mijn mysql.log zie:
code:
1
DELETE FROM Dames WHERE Nummer_dames = 1 AND Naam = blabla AND Land = blabla

en dat moet zijn:
code:
1
DELETE FROM Dames WHERE Nummer_dames = '1' AND Naam = 'blabla' AND Land = 'blabla'

En zo zet ik het in Delphi:
code:
1
2
3
4
5
Naam := NaamEdt.Text ;
Nummer_dames := NummerEdt.Text ;
Land := LandEdt.Text ;
Query := 'DELETE FROM Dames Nummer_dames = ' + Nummer_dames +
' AND Naam = ' + Naam + ' AND Land = ' + Land ;

Hij moet dus om de variabele nog twee quotjes neerzetten! :)

Google, Het mirakel van de 21e eeuw!!!!


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Dus zet je er kwootjes omheen ?

ah.. nou wil je weten hoe.. DAT staat toch echt gewoon in de help functie. Simpele search in de manual.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • active2
  • Registratie: Juni 2001
  • Laatst online: 13-09 21:19

active2

Google is your friend

Topicstarter
Op maandag 10 december 2001 09:28 schreef dusty het volgende:
Dus zet je er kwootjes omheen ?

ah.. nou wil je weten hoe.. DAT staat toch echt gewoon in de help functie. Simpele search in de manual.
Lijkt me simpele oplossing!

Maar als ik 3 quotjes bij die string geef dan komt exact wat er staat in mijn mysql.log. Dus dat is de oplossing ook niet!

Google, Het mirakel van de 21e eeuw!!!!


  • intert0y
  • Registratie: Februari 2000
  • Laatst online: 10-03-2025
Ik weet niet precies hoe het komt maar ik moet soms verschillende kwootjes gebruiken.

we hebben deze `
en we hebben deze '

De rechte en de terugliggende dus. Misschien dat het hem daar in zit?

Jouw query zou er dan dus zo uit zien:
code:
1
DELETE FROM `Dames` WHERE `Nummer_dames` = '1' AND `Naam` = 'blabla' AND `Land` = 'blabla'

ik ben geen postbode, maar postman Pat rulez!


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

TestString:='Hoi, mijn naam is: ''Japie''';

Geeft als string: Hoi, mijn naam is: 'Japie'

En SQL werkt (ik heb veel op Oracle gewerkt; of dit voor MySQL geldt weet ik niet zeker) ook zo:
DELETE FROM BLADIEBLA WHERE NAME="Joost";

Dus: SQL:='DELETE FROM BLADIEBLA WHERE NAME="Joost"';
Dat tikt wat overzichelijker dan al die ' tekentjes.

Siditamentis astuentis pactum.


  • Ramon
  • Registratie: Juli 2000
  • Laatst online: 22:23
of, je doet het zo:

var = 'dit is een \'test\''

wordt:

dit is een 'test'

Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/


Verwijderd

Het makkelijkst werkt met een dubbele quote (")
dit pikt sql ook gewoon en je hoeft dan niet te kutten met meerder quotes om een string te openen en sluiten
dus je krijgt dan:
code:
1
2
Query := 'DELETE FROM Dames Nummer_dames = "' + Nummer_dames +
'" AND Naam = "' + Naam + '" AND Land = "' + Land + '"';

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 12-07 11:54
Volgens mij komen de quotes gewoon niet in de log te staan ongeacht de query die je verstuurd.

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Op maandag 10 december 2001 10:04 schreef Tampie2000 het volgende:
var = 'dit is een \'test\''
Dat kan in C, maar niet in Delphi.

Siditamentis astuentis pactum.


  • active2
  • Registratie: Juni 2001
  • Laatst online: 13-09 21:19

active2

Google is your friend

Topicstarter
Op maandag 10 december 2001 10:12 schreef stekkel het volgende:
Volgens mij komen de quotes gewoon niet in de log te staan ongeacht de query die je verstuurd.
Die komen er wel te staan!!!

Google, Het mirakel van de 21e eeuw!!!!


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18:04

Creepy

Tactical Espionage Splatterer

Op maandag 10 december 2001 09:26 schreef active2 het volgende:
Dit is de string die ik in mijn mysql.log zie:
code:
1
DELETE FROM Dames WHERE Nummer_dames = 1 AND Naam = blabla AND Land = blabla

en dat moet zijn:
code:
1
DELETE FROM Dames WHERE Nummer_dames = '1' AND Naam = 'blabla' AND Land = 'blabla'
EEh.. quotes om je 1? zolang nummer_dames ook echt een numeriek veld is, heb je dat alvast niet nodig! (en zul je waarschijnlijk ook wel een error terugkrijgen van MySQL.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Onno
  • Registratie: Juni 1999
  • Niet online
Op maandag 10 december 2001 10:00 schreef Varienaja het volgende:
En SQL werkt (ik heb veel op Oracle gewerkt; of dit voor MySQL geldt weet ik niet zeker) ook zo:
DELETE FROM BLADIEBLA WHERE NAME="Joost";
*Juist* niet. In SQL worden dubbele quotes gebruikt rond identifiers, en enkele rond literals. MySQL wijkt daarvan af door ook dubbele rond literals toe te staan. Oracle niet.

Verwijderd

Op maandag 10 december 2001 10:54 schreef Onno het volgende:
*Juist* niet. In SQL worden dubbele quotes gebruikt rond identifiers, en enkele rond literals. MySQL wijkt daarvan af door ook dubbele rond literals toe te staan. Oracle niet.
InterBase t/m 5.6 accepteert ze wel, vanaf versie 6 echter niet meer (tenzij je een lager dialect kiest).
MSSQL en SyBase via de BDE hebben er ook geen moeite mee, maar via ADO mag 't niet meer.
Oftewel, dubbele quotes zijn idd niet zo handig...

Verwijderd

Je kunt gewoon de functie chr() gebruiken om allerlei characters te plaatsen zonder dat de compiler zich daarin verslikt. chr(39) is een '

dus 'parameter '+chr(39)+ variable + chr(39) levert op runtime

parameter = 'inhoud variable'

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

QuotedStr functie misschien?

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

Op maandag 10 december 2001 21:12 schreef jelmervos het volgende:
QuotedStr functie misschien?
Die vervangt de single quotes binnen de string door 2 single quotes voordat 'ie er zelf quotes omheen zet.
Erg handig binnen Delphi, maar SQL is daar niet zo kapot van: die zet dubbele single quotes binnen een string niet zelf om naar 1 single quote, maar ziet de eerste die 'ie tegenkomt gewoon als einde van de string...

Idem voor de genoemde oplossing om chr(39) te gebruiken:
Na compileren is

'select * from tabel where ID = ''' + IDString + ''''

hetzelfde als

'select * from tabel where ID = ' + chr(39) + IDString + chr(39)
of
'select * from tabel where ID = '#39 + IDString + #39

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:29
Een andere oplossing, die misschien wel wat beter is, is deze:
code:
1
2
3
4
5
6
7
8
Query1.SQL.Text := 'DELETE FROM Dames WHERE id = :p_id AND naam = :p_naam'
Query1.ParamByName(p_id).AsString := '1'; //Hier gebruik ik AsString omdat 
                            //ik zie dat je ook quotes zet rond die 1, 
                            //alhoewel ik vermoed dat een id eigenlijk 
                            //wel numeriek zou moeten zijn.  
                            //Als dit zo is, gebruik je beter AsInteger
Query1.ParamByName(p_naam).AsString := 'blbabla';
Query1.ExecSQL();

Dit maakt het geheel een stuk 'dynamischer'. Zo kan je ervoor zorgen dat je de waarden van de parameters niet moet hard-coden.

https://fgheysels.github.io/


Verwijderd

Ligt eraan of active2 dbExpress of een ODBC/ADO koppeling met MySQL gebruikt.
In 't eerste geval kun je dan "Query1.Params.ParamByName" gebruiken, maar bij ADO wordt dat "Query1.Parameters.ParamByName".

Beide zijn TDataSet descendants, maar geen van beide (BDE-)TQuery descendants.

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Hoe kan ik vanuit Delphi 6 Enterprise een MySQL database benaderen zonder MyODBC te gebruiken.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

Zit dbExpress niet bij D6? (van D6 heb ik alleen maar de personal editie, zonder DB access dus ;( )
Kijk anders 's naar Zeos Database Objects. Geen website gevonden, maar bij Torry is 'ie wel te downloaden. Freeware incl. source.

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

dbExpress zit erbij. Hij wil dan een DLL hebben.

Ik heb hier wel es wat over gelezen, dit zou namelijk nogal wat problemen kunnen geven met verschillende MySQL versies.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

Op dinsdag 11 december 2001 23:34 schreef jelmervos het volgende:
dbExpress zit erbij. Hij wil dan een DLL hebben.
Hmm... Net geprobeerd in Kylix, en ik krijg dan ook "Unable to load libmysqlclient.so.6.0.0". (so's zijn zeg maar de dll's van Linux)
Had 't nog niet eerder geprobeerd (ik gebruik geen MySQL).

Verwijderd

Op dinsdag 11 december 2001 13:35 schreef jelmervos het volgende:
Hoe kan ik vanuit Delphi 6 Enterprise een MySQL database benaderen zonder MyODBC te gebruiken.
D'r zijn componenten waarmee je geen ODBC hoeft te gebruiken.

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Op woensdag 12 december 2001 10:13 schreef Los_Bastardos het volgende:

[..]

D'r zijn componenten waarmee je geen ODBC hoeft te gebruiken.
Maar het kan dus niet met de standaard shit van Delphi.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

Op woensdag 12 december 2001 10:14 schreef jelmervos het volgende:

[..]

Maar het kan dus niet met de standaard shit van Delphi.
Nee, zover ik weet kan dit niet met de standaard componenten in Delphi.

Waarom wil je eigenlijk geen ODBC gebruiken als ik vragen mag? Ik werk er zelf namelijk wel mee en heb er eigenlijk weinig/geen last van gehad.

Verwijderd

Op dinsdag 11 december 2001 23:44 schreef Afterlife het volgende:
Hmm... Net geprobeerd in Kylix, en ik krijg dan ook "Unable to load libmysqlclient.so.6.0.0".
|:( Oplossing was bij mij heel simpel: VendorLib wijzigen in 'libmysqlclient.so' i.p.v. 'libmysqlclient.so.6.0.0'. Versie 10.0.0 stond nl. al geinstalleerd. :)

Maar voor Windows is dat nog steeds geen oplossing, helaas.
Al naar die Zeos dingen gekeken?

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Op woensdag 12 december 2001 20:38 schreef Los_Bastardos het volgende:

[..]

Nee, zover ik weet kan dit niet met de standaard componenten in Delphi.

Waarom wil je eigenlijk geen ODBC gebruiken als ik vragen mag? Ik werk er zelf namelijk wel mee en heb er eigenlijk weinig/geen last van gehad.
Omdat ik wel benieuwd was hoe dat DBExpress werkt van Delphi. Want dan hoef je niet eerst MyODBC te installeren. Gemakzucht denk ik. :)

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

Op woensdag 12 december 2001 20:38 schreef Los_Bastardos het volgende:
Waarom wil je eigenlijk geen ODBC gebruiken als ik vragen mag?
't Kan de boel nogal vertragen. Of dat ook voor MyODBC geldt weet ik niet, maar bv. de Visigenic ODBC drivers voor InterBase zijn door de bank genomen ruim 4x langzamer dan IBObjects. De BDE en IbExpress zitten daar ergens tussenin, maar nog steeds veel sneller dan via ODBC.

Verwijderd

Op woensdag 12 december 2001 20:51 schreef jelmervos het volgende:

[..]

Omdat ik wel benieuwd was hoe dat DBExpress werkt van Delphi. Want dan hoef je niet eerst MyODBC te installeren. Gemakzucht denk ik. :)
Aha. Zelf geen ervaring mee.
Is natuurlijk ook wel handig als je een programma moet installeren bij andere mensen :)

Verwijderd

Op woensdag 12 december 2001 21:17 schreef Afterlife het volgende:

[..]

't Kan de boel nogal vertragen. Of dat ook voor MyODBC geldt weet ik niet, maar bv. de Visigenic ODBC drivers voor InterBase zijn door de bank genomen ruim 4x langzamer dan IBObjects. De BDE en IbExpress zitten daar ergens tussenin, maar nog steeds veel sneller dan via ODBC.
Dat is idd erg belangrijk. Ik heb wel ooit eens een component gebruikt waardoor ik geen ODCB meer gebruikte, maar die was zelfs enorm traag. Toen wilde ik graag geen ODBC gebruiken omdat ik niet wist hoe je een DSN dynamisch kon toevoegen, maar dat was snel opgelost :)

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18:04

Creepy

Tactical Espionage Splatterer

Op woensdag 12 december 2001 10:14 schreef jelmervos het volgende:

[..]

Maar het kan dus niet met de standaard shit van Delphi.
:Z

Kijk je wel eens componenten door voordat je begint te praten? (sorry als het flamerig overkomt.. maar kom op zeg!)
Kijk eens in D6 naar de dbexpress componenten. Daarmee kan je zonder extra drivers/shit een connectie maken met een MySQL/Oracle (en nog een aantal) databases.

Het enige wat je nodig hebt is een mysql.dll die bij de windows versie van MySQL zit. Die zet je in dezelfde directory naast je applicatie.... en tada!
(Dit is dus NIEUW in Delphi 6)

Exe kopieren naar een willekeurige computer, die dll ook,en klaar.. niks geen geinstalleer, geen ODBC, geen BDE, jehoeft zelfs de DLL niet eens te registreren o.i.d.

edit:
Hmm. ik was iets te snel. sowwy! Je hebt dus al naar de dbexpress componenten gekeken? Werken ze niet? Gaat er iets mis?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Uuhmm, lekker verhaal. Sorry hoor als ik weer wat verkeerd doe hier.


Ik heb er idd es naar gekeken, maar er was iets met de versie nummers van MySQL. Dat kwam nogal precies. Het er verder ook niet naar gekeken, daarom vraag ik het hier. Sorry.

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • The-Source
  • Registratie: Augustus 2001
  • Laatst online: 11:56
Op maandag 10 december 2001 09:26 schreef active2 het volgende:
Het is me gelukt om met Delphi met MySQL te kunnen communiceren! :):):) Ikke erg blij!!!! :)
code:
1
2
3
4
5
Naam := NaamEdt.Text ;
Nummer_dames := NummerEdt.Text ;
Land := LandEdt.Text ;
Query := 'DELETE FROM Dames Nummer_dames = ' + Nummer_dames +
' AND Naam = ' + Naam + ' AND Land = ' + Land ;

Hij moet dus om de variabele nog twee quotjes neerzetten! :)
Ik denk dat je delphi code zo moet:
code:
1
2
3
4
5
Naam := NaamEdt.Text ;
Nummer_dames := NummerEdt.Text ;
Land := LandEdt.Text ;
Query := 'DELETE FROM Dames Nummer_dames = ''' + Nummer_dames +
''' AND Naam = ''' + Naam + ''' AND Land = ''' + Land + '''';

drie singel quotes ''' zorgt er voor dat de tekenreeks wordt geopend/ gesloten met daarvoor/ achter ' (2x '' ziet delphi als 1 ') de laaste 4 '''' doet: open tekenreeks plaat 1 ' (de 2e en 3e ') en sluit de tekenreeks weer af.

Ik heb dit alles niet uitgeprobeerd maar ik weet dat het quotes verhaal best lastig is.

Taal fouten inbegrepen ;)


  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 12-07 11:54
kijk maar eens op www.zeoslib.org.

Hier staat een geweldig component om met mysql te communiceren.

  • glrfndl
  • Registratie: Juni 1999
  • Niet online
toevallig heb ik net een progje in delphi gemaakt dat met die dbexpress dingen een mysqlkoppeling legt. Bij je uiteindelijke .exe moet je dan libmysql.dll en dbexpmys.dll meeleveren. Maar het werkt dus wel gewoon met de standaard boel in delphi, kan idd wel zijn dat je de goede mysqlversie moet hebben en libmysql.dll.
Als je nog meer moet weten moet je me maar icq'en

Prepare for unforeseen consequences

Pagina: 1