Manus Blog twitter
Manus Blog Rss

Die BDE muss weg, die BDE muss weg…

Veröffentlicht von Manu in Computer, Programmierung am 20-01-2010

Tags: , , , , , , , , , , , , , , , , , , ,

3

… ja, so ähnlich ist Momentan ein Status bei einem größeren Softwareprojekt. Das Projekt wurde vor Jahren gestartet, auf der BDE aufgebaut, bis ins Jahr 2009 mit Delphi 5 kompiliert. Doch nun ist die Zeit gekommen, alles zu ändern.

Die Ausgangssituation: Das Projekt benutzt die BDE mit 46 Tabellen, als Datenanzeige im Programm kommt eine Komponente mit dem Namen “TDBScroll” (etwa ein leicht verbessertes TDBGrid) zum Einsatz. Die Komponente lässt sich nicht mal mehr per Google finden… Desweiteren haben die damals aktuellen WPTools 4 (Reporting-Tool, PDF Export) sowie die damals aktuellen TeeChart 5 ihren Existenzgrund im Programm. Der gelungene Abschluss macht die Komponente “TStringLoader” (ebenfalls per Google nicht auffindbar), die die Anwendung in mittlerweile fünf Sprachen lokalisiert (dazu benötigt man pro Form und pro Sprache eine eigene Ini-Datei. Das Programm hat 22 Forms, daher werden 110 Sprachdateien benötigt), darunter Deutsch, Englisch, Französisch, Spanisch und Italienisch.

Nun ist die Zeit gekommen, an dem das Projekt so nicht weiterlaufen kann. Die BDE macht Probleme unter Windows > Vista, die Sprachdateien zu editieren ist nur noch grausam und an kyrillische Sprachen wie Russisch ist gar nicht zu denken. Natürlich gibt es entsprechende Komponenten, um kyrillische Sprachen auch in Delphi 5 verfügbar zu machen, doch Delphi 5 ist mittlerweile auch stolze elf Jahre alt. Alles in allem muss das Programm renoviert werden. ;-) Genau das ist im Moment meine Aufgabe.

Hier eine kleine Übersicht, wie die alten verstaubten Komponenten gegen neue hochglänzende getauscht werden.

TDBScroll

Die datensensitive Anzeigekomponente wird mit dem QuantumGrid von DevExpress getauscht. Ich muss sagen, dass ich von der Qualität der DevExpress Komponenten sehr beeindruckt bin, das sind wahrlich Monsterkomponenten, die (fast) keinen Wunsch übrig lassen. Falls jemand auf der Suche nach einem Grid ist, schaut Euch das QuantumGrid an, es lohnt sich!

TQuery & Co.

Da ja die BDE in den Mülleimer geworfen wird, müssen auch neue Zugriffskomponenten her. Hier fiel die Wahl auf die AnyDAC von RemObjects. Klasse Dinger und bei Fragen ist der Support, der eigentlich (fast) nur aus dem Programmierer der AnyDAC, Dmitry Arefiev, besteht, wirklich schnell, kompetent und freundlich, so soll es sein.

WPTools 4 & TeeChart 5

Hier wird ganz unspektakulär gegen jeweils die neuste Version der Komponenten getauscht: WPTools 6 und TeeCharts 8

TStringLoader

Auch wenn der RTTI Ansatz dieser Komponente gar nicht mal so schlecht ist, ist es dennoch furchtbar, dass man pro Sprache und Form jeweils eine Sprach-Ini hat, muss weg. Was hier als Ersatz zum Einsatz kommt, ist noch nicht ganz klar. Im Moment wird es entweder GNU GetText for Delphi oder ein eigenes kleines auf FireBird gestütztes System.

BDE

Das ist wohl das größte Sorgenkind der ganzen Anwendung: Die BDE. Damals wohl noch ganz nett und es war schon bei Delphi dabei, muss es nun Platz machen, gegen gescheite Desktop-Datenbanken. Hier fiel die Wahl eigentlich direkt auf FireBird (als embedded-Variante). Nach vielen vielen Tools, die ich ausprobiert habe, um die Daten von der BDE in eine FireBird-DB zu bekommen, half letztendlich das Tool IBDataPump von CleverComponents. Das Programm gibt es kostenlos zum Download und war das einzige Programm, dass die Struktur und die Daten problemlos in FireBird überführte.

Innerhalb des Quelltextes mussten auch einige Änderungen gemacht werden. Gerne hatte man solche netten doppelten Anführungszeichen im Quelltext, die FB-DB bricht bei solchen Konstrukten mit der Fehlermeldung “Column unknown” ab.

Query.SQL.Add('WHERE Feldname = "Text"');

Mein Vorgänger kannte wohl noch kein

Query.SQL.Add('WHERE Feldname = :feld');
Query.ParamByName('feld').AsString := 'Text';

Tja, da auf Grund der Quelltextgegebenheit ich viele Queries neu schreiben müsste, behelfe ich mir mit dem Workaround, dass ich die doppelten Anführungszeichen gegen zwei einfache tausche. Natürlich ist das noch nicht sauber und dient wirklich nur als Workaround, aber behindert im Moment die Umstellung des Programms nicht. Sobald dort das meiste durch ist, statte ich den Queries einen Besuch ab.

Weitere kleine Änderungen betreffen nur das QuantumGrid, aber diese sind kaum relevant und betreffen fast nur das Aussehen.

Delphi 5

Richtig, auch das Delphi 5, das einige gerne als das beste Delphi aller Zeiten ansehen, muss getauscht werden, gegen ein Delphi 2009. Der Tausch ist nötig, da Delphi 2009 nativ Unicode unterstützt, da spart man sich das Tauschen der normalen Buttons gegen welche, die Unicode unterstützen. Auch empfinde ich den Code-Editor angenehmer, als der von Delphi 5, aber das ist reine Geschmackssache. Manche brauchen diesen Schnickschack, andere nicht, ich gehöre allerdings zu ersteren. ;-)

InstallShield Express (Borland Edition)

Wenn man schon so viel umstellt, dann kann man auch gleich einen neuen Installer benutzen. Das Programm benutzt im Moment noch den InstallShield Express (Borland Edition), das automatisch die BDE mitinstallierte. Da diese nun weg ist, kann ein neues Installer her, der auch ein multilinguales Setup anbietet. Hier fiel die Entscheidung auf InstallAware. Vorher zwei Setups (eins in Deutsch, eins in Englisch) mit jeweils 30MB ist es nun nur noch ein Setup für beide Sprachen mit 22MB.

Soviel erst mal dazu, musste das ganze einfach mal bloggen (gab ja schon wieder längere Zeit nichts mehr ;-) )

Das erste eigene Programm

Veröffentlicht von Manu in Computer, Hardware, Pololu 3pi, Programmierung am 25-07-2009

0

Hi,

gestern habe ich mich doch noch kurz dran gesetzt und schrieb mein erstes, winziges Programm für den Roboter. Das Ziel: Im Kreis herum fahren. :)

Um das zu erreichen, braucht man nur recht wenig Code, die 3pi API bietet schon einiges:

/*******************************************************
* CircleDrive                                          *
*                                                      *
* Author:  Manuel Rauber                               *
*                                                      *
* Date: 25.07.2009                                     *
*                                                      *
* Purpose: Let 3pi drive a little circle               *
*                                                      *
* Usage:                                               *
*      Press Button B to start the program             *
********************************************************/

// Include 3pi API
#include <pololu/3pi.h>

int main() {
  // Wait for the user. He has to press the B Button to start
  while (!button_is_pressed(BUTTON_B));
  wait_for_button_release(BUTTON_B);
  delay_ms(2000);

  // Infinite loop
  while (1) {
    // Drive 2 secs straight on
    set_motors(40, 40);
    delay_ms(2000);

    // Do a 90 Degree turn to the left
    set_motors(-80, 80);
    delay_ms(180);
  }
}

Das liebe Anführungszeichen

Veröffentlicht von Manu in Programmierung am 29-08-2008

Tags: , ,

5

Hi,

war heute mal wieder ein bisschen am PHP programmieren und hab mit RegExen rumgespielt. Ich wollte bestimmte Elemente, die in {$ $} eingschlossen waren (also z.B. {$test$}) finden und durch nichts ersetzen.

Dafür schrieb ich mir das folgende RegEx:

#{\$(.*?)\$}#

An sich ein kleines, schnuckeliges RegEx, was auch tadellos funktioniert, zumindest auf den ersten Blick.

Als PHP-Code sah das ganze zu erst so aus (vereinfacht):

public function replacetags($input) {
  $regex = "#{\$(.*?)\$}#";  	

  return preg_replace($regex, '', $input);
}

Doch hoppla, egal was ich in den Input stopfte, es wurden nie meine {$ $} gelöscht. Zuerst dachte ich, dass es doch an der RegEx lag, weswegen ich es mit dem RegEx-Tool getestet hab, dort funktionierte es allerdings tadellos. Nach langem Probieren habe ich aus den doppelten Anführungszeichen ( ” ) ein einfaches ( ‘ ) gemacht und schwupps, funktionierte alles ohne Probleme.

Ich bin immer noch am Überlegen, warum es mit den doppelten Anführungszeichen nicht funktioniert, wohl aber mit den einfachen. Falls jemand die Lösung weiß oder einen Tipp hat, nur her damit ;-)