Dynamischer Daten Import / Export

datenbank

weil Einfach - produktiver ist
Mit der Freeware Version können bis zu 10.000 Datensätze verarbeitet werden!
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
Willkommen im FlowHeater Support Forum!

Hier werden Fragen zum Umgang mit dem FlowHeater beantwortet.

THEMA: Mehrere DateTIme-Felder auf Wert prüfen

Mehrere DateTIme-Felder auf Wert prüfen 3 Jahre 7 Monate her #1311

  • Hans-Peter Bruns
  • Hans-Peter Brunss Avatar
  • Offline
  • New Member
  • Beiträge: 11
Hallo Herr Stark

mal wieder eine (vielleicht) dumme Frage :unsure:

Ich habe eine db3 Tabelle mit 20 DateTime Feldern.
Diese beinhalten eignetlich Öffnungs- bzw. Pausenzeiten.

Beispiel:
Mo Offen 08:00
Mo Pause Von 12:00

usw.

Die Felder können aber auch leer sein.

Wenn ich mir die Daten auf der READ-Seite anzeigen lasse, bekomme ich sowas wie 30.12.1899 08:00:00, oder aber 01.01.0001 00:00:00.

Bein Anfügen an eine SQL-Server Tabelle für die 01.01.0001 allerdings zu einem Fehler.
Jetzt könnte ich für jeder Spalte einen IfThenElse-Heater verwenden. Das ist jedoch ziemlich aufwendig. Gibt es vielleicht eine einfachere Möglichkeit (z.B. .Net-Heater)

Gruß
Hans-Peter Bruns
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Mehrere DateTIme-Felder auf Wert prüfen 3 Jahre 7 Monate her #1313

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1102
Hallo Herr Bruns,

Sie müssen immer für jedes Feld einzeln angeben was damit gemacht werden soll. Wenn Sie z.B. 20 Felder haben die Sie prüfen möchten/müssen, benötigen Sie dafür jeweils separate Heater zum Prüfen der einzelnen Felder. Wenn Sie das über ein Script für den .NET Script Heater durchführen möchten, benötigen Sie dafür ebenfalls für jedes Feld einen separaten .NET Script Heater.

Evtl. würde es aber reichen, wenn Sie auf der READ Seite den Felder einen Standardwert zuweisen.

z.B. 01.01.1899 00:00:00

Dieser Wert wird dann vom FlowHeater verwendet wenn das Feld keinen Inhalt hat.
gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Mehrere DateTIme-Felder auf Wert prüfen 3 Jahre 7 Monate her #1314

  • Hans-Peter Bruns
  • Hans-Peter Brunss Avatar
  • Offline
  • New Member
  • Beiträge: 11
Hallo Herr Stark

es ist noch schlimmer :side:
Die Felder sind als DateTime in der DB3 deklariert.
Statt NULL schreibt die Software aber einen leeren String in die Felder ('').

Die Lösung die ich gerade im Kopf habe, ist ein Update auf die einzelnen Felder beim Start auf der READ-Seite.

Jetzt habe ich nur ein Problem. Wie kann ich mehrere UPDATE-Statements in einen SQL-Heater packen?????

Gruß

Hans-Peter Bruns

Nachtrag:

Ich habe das ganze mit .Net Code lösen wollen.
' Diese Funktion ist zwingend erforderlich!
Public Function DoWork() As Object

	Dim SQLite as String
	Dim Gebiet as String
	Dim Unzip as String
	Dim ImportKey As String
	Dim StartParmeter as String

  	Dim oAdapter as DatabaseAdapter
	
  	' Hier den Pfad zu den den SQLite Datenbanken anpassen $GEBIET$ wird dabei ersetzt!
  	SQLite = "C:\inetpub\wwwroot\FileTransferService\Android\Hochland\inbox\Hochland$Gebiet$\$UnzipFolder$\hochland.db3"
	
  	' Zugriff SQLite Adapter der WRITE Seite
  	oAdapter = AdapterRead

	StartParmeter = Parameter("StartParameter").GetString()
	
	Dim arrParameter() as String
	arrParameter = Parameter("StartParameter").GetString.Split(";")
	Gebiet = arrParameter(0)
	Unzip  = arrParameter(1)
	ImportKey  = arrParameter(2)

	Parameter("Gebiet").Value = Gebiet
	Parameter("UnzipFolder").Value = Unzip  
	Parameter("ImportKey").Value = ImportKey  

  	' Gebiet im SQLite Adapter ersetzen
  	oAdapter.Database = SQLite.Replace("$GEBIET$", Gebiet)
	oAdapter.Database = SQLite.Replace("$UnzipFolder$", Unzip)

	UD

End Function

Public Function UD
	Dim adapter as DatabaseAdapter

	adapter = AdapterRead
	adapter.execute("UPDATE [bsstxt] SET [Datum_von] = NULL WHERE Datum_von = ''")
	adapter.execute("UPDATE [bsstxt] SET [Datum_bis] = NULL WHERE Datum_bis = ''")
	adapter.execute("UPDATE [bsstxt] SET [Zeit_von] = NULL WHERE Zeit_von = ''")
	adapter.execute("UPDATE [bsstxt] SET [Zeit_bis] = NULL WHERE Zeit_bis = ''")

End Function

Allerdings funkioniert das nur, wenn ich das ganze im Testlauf ausführe.
Sobald ich den Haken Testlauf entferne wird der Code anscheinend nicht ausgeführt

???????

Gruß

HaPe
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Mehrere DateTIme-Felder auf Wert prüfen 3 Jahre 7 Monate her #1317

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1102
Hallo Herr Bruns,

ich kann das verhalten mit SQLite nachstellen. Allerdings werden die UPDATE Statements anscheinend immer erst nach dem abgreifen in die SQLite Datenbank geschrieben. Somit erhalten Sie das aktualisierte Ergebnis erst nach dem 2. Aufruf. Hier scheint das SQLite cacheing dafür verantwortlich zu sein, das muss ich etwas genauer prüfen.

Workaround 1) Verwenden zu Zugriff auf SQLite den FlowHeater SQLiteAdapter? Wenn ja können Sie den Datentypen der betroffenen DATE, TIME bzw. DATETIME Felder auf String stellen und den oben erwähnten Trick mit dem Default Wert verwenden. Damit hier eingetragen Zeit bzw. Datumsangaben richtig erkannt werden müssen Sie auf der READ Seite lediglich das Format für Datumsangaben so anpassen wie Sie bei Ihnen in der SQLite Datenbank gespeichert werden.

Workaround 2) Sie können das Update über eine zweite vorgeschaltete Dummy Definition durchführen. So kann SQL den cache sauber in die Datenbank schreiben, beim eigentlichen Aufruf der zweiten Definition greifen Sie dann die richtigen Daten ab.
gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Mehrere DateTIme-Felder auf Wert prüfen 3 Jahre 7 Monate her #1318

  • Hans-Peter Bruns
  • Hans-Peter Brunss Avatar
  • Offline
  • New Member
  • Beiträge: 11
Hallo Herr Stark

vielen Dank für die Info. Ich teste das mal.
Aber eine Frage habe ich noch. Kann man die Reihenfolge der Heater irgendwie beeinflussen?

Gruß

HaPe
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Mehrere DateTIme-Felder auf Wert prüfen 3 Jahre 7 Monate her #1323

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1102
Hallo Herr Bruns,

die Reihenfolge der normalen Heater / Funktionen können Sie nicht beeinflussen, die richtet sich nach unterschiedlichen Kriterien so dass die Ausführung anhand von Abhängigkeiten passt.

Wenn Sie mehrere Heater haben die beim Start bzw. am Ende ausgeführt werden sollen können Sie Einfluss auf die Ausführung nehmen anhand der Reihenfolge wie sie auf dem Designer gezogen werden. Im Nachhinein können Sie die Reihenfolge z.Zt. nicht mehr ändern sowie wird die Reichenfolge auch nicht weiter angezeigt. Den Punkt habe ich für eine zukünftige Version mit aufgenommen.
gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Mehrere DateTIme-Felder auf Wert prüfen 3 Jahre 7 Monate her #1325

  • Hans-Peter Bruns
  • Hans-Peter Brunss Avatar
  • Offline
  • New Member
  • Beiträge: 11
Hallo Herr Stark

Das hatte ich mir schon gedacht. Ich habe versucht, die Reihenfolge der Heater in der fhd-Datei zu ändern. Das "scheint" zu funktionieren. Habe es aber noch nicht ausführlich getestet

Gruß
HaPe
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Mehrere DateTIme-Felder auf Wert prüfen 3 Jahre 7 Monate her #1335

  • StefanN
  • StefanNs Avatar
  • Offline
  • New Member
  • Beiträge: 7
Hallo,

wenn Sie einen SQl-Server ab Version 2008 einsetzen, können Sie den Datentyp "DateTime2(7)" verwenden.
siehe auch
DateTime2_01 (Link auf msdn von Microsoft)
DateTime2_02 (Tabelle in der Mitte ist interessant)

Den Code habe ich so verstanden, dass auf die Quelltabelle die Update-Statements gehen oder? (Gibt es da keine Funktion "flush" oder so?)
oder passen Sie doch in C#-Code die DataTable an nachdem die Daten gelsen wurden und prüfen die Datumsfelder, die an den Flowheater übergeben wird, wenn Sie es sowieso den Adapter programmieren.

mfg
Stefan Neubauer
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Mehrere DateTIme-Felder auf Wert prüfen 3 Jahre 7 Monate her #1337

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1102
Hallo Herr Neubauer,

in dieser Anfrage ging es um den Export einer SQlite 3 Datenbank die dann in eine SQL Server Datenbank importiert werden sollte. Das eigentliche Problem mit dem Datum ist hier, dass SQlite die Datentypen DATE, TIME bzw. DATETIME nicht kennt. Diese werden hier als Text gespeichert. Einen eigenen Adapter über den .NET DataTable Adapter dafür zu schreiben halte ich in diesem Fall für etwas übertrieben :)
gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Mehrere DateTIme-Felder auf Wert prüfen 3 Jahre 7 Monate her #1338

  • StefanN
  • StefanNs Avatar
  • Offline
  • New Member
  • Beiträge: 7
Hallo Herr Stark,

auf den "eigenen" Adapter bin ich nur gekommen, da Herr Bruns im Kommentar #1342 etwas von .Net-Code sagte und dort im Quellcode von einem "adapter" die Rede ist.

Gruß Stefan
Der Administrator hat öffentliche Schreibrechte deaktiviert.
Moderatoren: FlowHeater-Team
Ladezeit der Seite: 0.090 Sekunden