Delphi

04/18/2017 14:41 BoostoutoffEloHell#1
Hey,


Ich wollte mal fragen ob sich hier jemand mit Delphi auskennt und ob man mir bei 1 2 fragen behilflich sein könnte, es geht darum Datenbankeinträge in die Mysql hinzuzufügen.


Mfg Lucas
04/18/2017 15:03 Devsome#2
Quote:
Originally Posted by BoostoutoffEloHell View Post
Hey,


Ich wollte mal fragen ob sich hier jemand mit Delphi auskennt und ob man mir bei 1 2 fragen behilflich sein könnte, es geht darum Datenbankeinträge in die Mysql hinzuzufügen.


Mfg Lucas
Stelle deine Frage doch einfach hier im Thread
04/18/2017 15:25 warfley#3
Naja zunächst einmal wäre es wichtig zu wissen:
1. Welche Delphi Version (z.B. hat Rad Studio >= Enterprise FireDAC womit das kinderleicht ist, für Professional gibt es das nur als kostenpflichtiges AddOn, für Starter gibts das gar nicht)
2. Muss es wirklich Delphi sein? Denn Lazarus, die OpenSource alternative zu Delphi (selbe Sprache, anderer Compiler, IDE und etwas andere Bibliotheken) hat diverse Datenbank Komponenten, unter anderem für MySQL/MariaDB.
3. Wärst du bereit Geld für auszugeben.

Das Hauptproblem ist einfach, Delphi wird mittlerweile nur noch von Unternehmen verwendet, und ist darauf auch komplett ausgelegt, das heißt jede Komponente für z.B. MySQL welche aktuell ist (es gibt auch noch einige von vor 3 Jahren oder noch älter, ich weiß aber nicht wie gut die noch funktionieren) haben hohe lizenskosten (natürlich bekommen unternehmen dann auch Tools welche die Benutzung kinderleicht gestaltet, denn immerhin ist Zeit = Geld), und die OpenSource Scene (also der Kostenlose gegenpart) ist zu Lazarus übergesprungen, da die 4 Stelligen Preise von Delphi für die meisten Privatentwickler zu hoch sind, dafür das die meisten Features von Delphi die Lazarus nicht hat sowieso nur für Unternehmen und eher selten für Privatpersonen relevant sind.

Also alles in allem: Machst du es privat oder ist es ein Auftrag für jemanden (Chef, o.ä.) wo Delphi pflicht ist?

Edit: hab grade Rausgefunden es gibt auch für Delphi die Zeos Bibliothek welche ich auch von Lazarus kenne (nie wirklich benutzt, da ich mit den Standard Lazaruskomponenten immer auskam) aber [Only registered and activated users can see links. Click Here To Register...].

Zeos ist eine sehr große Bibliothek für alle formen von Datenbanken, welche auch aktuell gehalten wird, und zu der es auch viel im Netz gibt (zwar mehr zu Lazarus als zu Delphi, aber der Code sollte zu großen Teile einfach austauschbar sein)
04/18/2017 17:42 BoostoutoffEloHell#4
Ich habe die Enterprise Version da ich von der Uni aus das ganze mache.

Meine eigentliche Frage ist eingentlich wieso sich in meiner Db nichts tut wenn ich das hier starte.

procedure TForm1.Button2Click(Sender: TObject);
begin

ADOQuery1.SQL.Text := 'Select * from taccounts';
ADOQuery1.Open;
ADOQuery1.Append; //ein leerer Datensatz hinzu
ADOQuery1.FieldByName('nEMID').AsInteger := 4;
ADOQuery1.FieldByName('sUsername').AsString := 'Hallo';
ADOQuery1.FieldByName('sUserPass').AsString := 'Hallo1';
ADOQuery1.FieldByName('sUserPassSalt').AsString := 'Hallo1';
ADOQuery1.FieldByName('sEmail').AsString := 'Hallo1';
ADOQuery1.FieldByName('nAuthID').AsInteger := 4;
ADOQuery1.FieldByName('sIP').AsString := '127.0.0.1';
ADOQuery1.Post; //abschicken
ADOQuery1.ExecSQL;

end;


Mfg Lucas
04/18/2017 18:21 warfley#5
Ich kenne mich mit den Komponenten nicht aus, aber so wie ich das (aus anderen Komponenten) kenne musst du für einen Eintrag zu SQL hinzuzufügen einen Insert Query verwenden
Code:
insert into Tabellename (Spalten) Values (Werte)
und die Fields geben die Möglichkeit die Konvertierung von Werten zu SQL Statements zu übernehmen ohne das man sich über so lästige dinge wie SQL Injection gedanken machen muss. Wenn ich mich richtig erinnere geht das so:
Sei der Query
Code:
insert into Tabellename (Spalte1, Spalte2) Values (:Wert1 :Wert2)
Dann kannst du mit FieldByName('Wert1') den Wert setzen der in Wert1/in der ersten Spalte stehen soll Stehen soll. Dann kümmert sich der DB Treiber darum das
1. Der wert keinen schaden anrichten kann (SQL Injection o.ä.)
2. die Konvertierung, damit du schon in deinem Quelltext die fehler bekommst und nicht erst durch das absenden
3. Du nicht so viele Stringmanipulationen machen musst (z.B. mit Format zu arbeiten), und damit den Code deutlich übersichtlicher und Wartbarer gestalten kannst

PS: Wenn sEMID ein Schlüssel ist der auf autoincrement gesetzt ist muss du diesen nicht mal einen Wert zuweisen, darum kümmert sie das DB System selbst (Und ist bei der Berechnung wahrscheinlich sogar performanter als du)

Edit: ich habe das vertauscht, ParamByName war das mit dem Ersetzen der :Variablen im Query nicht FieldByName.

Mal so ne dumme Frage, hast du die Entsprechende Transaktion auch Commited?
04/19/2017 14:20 Serraniel#6
Habe selber noch nie gesehen das man in dem Select Query nachher Werte in der DB updaten kann. Würde das wie @[Only registered and activated users can see links. Click Here To Register...] empfohlen hat über ein zweites Query machen und dann mit den Parametern arbeiten. Das ist der Standardweg für sowas.

Edit: kommt man über die Universitäten mittlerweile kostenfrei an Delphi? Ich kannte bisher nur die Rabatte durch Embarcadero für Studenten oder hat eure Uni nen separaten Vertrag mit denen o.Ä.?
04/19/2017 16:09 warfley#7
Quote:
Originally Posted by Serraniel View Post
Edit: kommt man über die Universitäten mittlerweile kostenfrei an Delphi? Ich kannte bisher nur die Rabatte durch Embarcadero für Studenten oder hat eure Uni nen separaten Vertrag mit denen o.Ä.?
Es gibt Unis die Delphi lehren, Uni Leipzig gehört glaube ich dazu, ich denke mal die werden auch Delphi Lizenzen rausgeben (sowie die meisten Unis eben auch Matlab Lizenzen bereitstellen). Von meiner Uni aus gibt es allerdings nur Rabatt auf Embarcadero Software.

Aber ich mach einfach mal schamlos Werbung: Wenn du Privat was suchst sieh dir Lazarus an, das kann fast alles was Delphi kann, und einiges mehr
Die meisten Projekte lassen sich ohne Änderungen oder mit nur sehr wenig Aufwand converten. Außerdem ist die IDE nicht so verbuggt wie Delphi, und es ist deutlich besser für Crossentwicklung, grade für z.B. Linux Server. (Das einzige Manko ist immernoch mobil, aber Android läuft schon ziemlich gut, und ist einfacher zu benutzen als Android Studio, nur iOS hab ich nie zum laufen bekommen)
04/19/2017 16:26 Serraniel#8
JO ich weiß war nur etwas verwundert, aber macht Sinn, wenn das an einigen Unis gelehrt wird. Darf die 2010 und XE10 Lizenzen von Arbeit ja auch privat nutzen von daher reicht mir das, aber danke :)