9. Juni 2020 15:40
9. Juni 2020 15:53
9. Juni 2020 16:10
9. Juni 2020 16:23
Ralph71 hat geschrieben:Eine Deklaration unter Globals --> Datentyp "DOTNET" ist nicht der richtige Weg?
9. Juni 2020 16:26
9. Juni 2020 16:27
Ralph71 hat geschrieben:Blöde Fragen:...
Ralph71 hat geschrieben:...Ich kann doch keinen C#-Code im CA/L verwenden?...
Ralph71 hat geschrieben:...jetzt gehts in die Basics....
9. Juni 2020 16:28
10. Juni 2020 11:43
10. Juni 2020 12:00
10. Juni 2020 15:48
10. Juni 2020 16:23
24. Juni 2020 09:08
24. Juni 2020 11:42
24. Juni 2020 13:07
24. Juni 2020 13:13
24. Juni 2020 14:40
Ralph71 hat geschrieben:...Ich habe mich an den Ratschlag von fiddi gehalten, und über Excel versucht eine Verbindung aufzubauen. Ohne Erfolg...
25. Juni 2020 13:10
30. Juni 2020 11:53
11. August 2023 12:08
IF TrustedConnNoPassword THEN BEGIN
ConnectionString := 'Data Source=' + ServerName+';'
+ 'Initial Catalog=' + DataBaseName + ';'
+ 'Trusted_Connection=True;';
END ELSE BEGIN
//Persist Security Info=false;User ID=*****;Password=*****;Initial Catalog=AdventureWorks;Server=MySqlServer;Encrypt=True
ConnectionString := 'Persist Security Info=false' + ';'
+ 'User ID=' + MyUserID + ';'
+ 'Password=' + MyPassword + ';'
+ 'Initial Catalog=' + DataBaseName + ';'
+ 'Server=' + ServerName+';'
+ 'Encrypt=false'; // besser auf "true" wenn verfügbar
END;
// ggf. im ConnectionString anhängen
//";MultipleActiveResultSets=True"; // für MARS
CLEAR(SQLReader);
CLEAR(SQLCommand);
CLEAR(SQLConnection);
SQLConnection := SQLConnection.SqlConnection(ConnectionString);
SQLConnection.Open;
SQLCommand.CommandText := MySQLCommand; // die eigene SQL-Abfrage SELECT…FROM…WHERE…ORDER BY…
SQLCommand := SQLConnection.CreateCommand();
SQLReader := SQLCommand.ExecuteReader;
// Vorabprüfung, ob Datensätze vorhanden
IF NOT SQLReader.HasRows THEN BEGIN
MESSAGE(NoRecordsFoundMsg);
//Hier kein Clear !
// In aufrufender Funktion sonst Fehlermeldung:
//The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
EXIT(FALSE);
END;
SQLReader.Close; // vor jedem neuen ExecuteReader immer den alten schließen
// Wenn Datensätze vorhanden sind
SQLReader := SQLCommand.ExecuteReader;
WHILE SQLReader.Read DO BEGIN
// Felder der Abfrage nach Bedarf verarbeiten
// und dabei die Feldreihenfolge im MySQLCommand beachten
// je nach Feldtyp SQLReader.GetDouble(<NrInAbfrage>),
//SQLReader.GetInt32(<NrInAbfrage>),SQLReader.GetString(<NrInAbfrage>) usw.
// SQLReader.GetFloat(<NrInAbfrage>) führt u.U. zum Fehler,
// auch wenn für das jeweilige Feld CONVERT(float,SQLTabellenname.SQLFeldname))
// im MySQLCommand steht
END;
SQLReader.Close;
// nur falls man die braucht, für den SQLReader nicht erforderlich
// im DataAdapter könnte man im Gegensatz zum SQLReader auch schreiben
// falls nur gelesen werden soll, diese weglassen
SQLDataTable := SQLDataTable.DataTable;
SQLDataAdapter := SQLDataAdapter.SqlDataAdapter(SQLCommand);
SQLDataAdapter.Fill(SQLDataTable);
SQLCommand.Dispose;
SQLConnection.Close;
CLEAR(SQLReader);
CLEAR(SQLCommand);
CLEAR(SQLConnection);