2010-07-30 10 views
1

Avec Delphi 2006, j'utilisais une bibliothèque de fonctions définies par l'utilisateur basée sur tbudf.pas et certaines fonctions que j'ajoutais seule. Comme je travaille sur un programme de paie, cette fonctionnalité est très utile pour certains concepts de paie courants qui pourraient nécessiter un SQL complexe. J'ai gardé mon installation Delphi 2006 et j'ai découvert hier que la compilation de ma bibliothèque ufd dans Delphi 2010 allait prendre du travail. Bien que je sois parvenu à comprendre comment le transfert de données fonctionnait entre ma DLL et le serveur Firebird, j'ai surtout créé mes propres fonctions en utilisant les fonctions qui existaient dans tbudf. Malheureusement, aucune des fonctions utilisées encodage de caractères Unicode. Peut-être que ce n'est pas un gros problème parce que j'ai installé toutes mes E/S Delphi 2010 avec la base de données pour utiliser AnsiStrings, alors peut-être que je peux changer n'importe quelle fonction Delphi 2010 pour utiliser quelque chose comme PAnsiChar. Mais je serai à peu près en train de tracer une nouvelle piste ici.Mise à jour de la bibliothèque Firebird UDF vers Delphi 2010

Y a-t-il des bibliothèques udf ouvertes qui ont été mises à jour vers Delphi 2010? Si vous avez des conseils sur ce qu'il faut surveiller, je peux peut-être les utiliser pour mettre à jour ma propre bibliothèque et la poster pour quelqu'un d'autre qui en a besoin.

+0

On dirait que je pourrais avoir commencé avec une idée fausse. Il semble que le remplacement unicode pour PChar (un pointeur vers une chaîne terminée par un caractère nul) devrait être PAnsiString plutôt que PAnsiChar. – jrodenhi

+0

Non. L'aide indique que PAnsiChar définit une chaîne terminée nulle comme le PChar l'a fait avant Delphi 2010. – jrodenhi

Répondre

3

J'ai déplacé un projet entier avec une base de données firebird en Unicode. A propos de udfs, si vous souhaitez conserver le codage de votre base de données tel quel, vous pouvez utiliser AnsiString/PAnsiChar au lieu de string/PChar. Mais si vous voulez utiliser UTF8 pour encoder votre base de données et profiter de Unicode dans Delphi, vous devez utiliser le type UTF8String à la place.

Attention, le codage de la connexion à la base de données est différent du codage de la base de données elle-même. Vous devriez également faire attention à la longueur des chaînes en UTF8.

Pour convertir une base de données UTF8, cet outil sera utile pour vous: http://code.google.com/p/fbclone/

+0

Merci Henri. Après avoir lu votre réponse, je suis retourné et suis passé par le code dll pour faire les changements. Cela semble fonctionner comme prévu maintenant. À l'heure actuelle, convertir la base de données pour travailler avec le codage de caractères Unicode ne produira aucun avantage et peut être perturbateur dans les bases de données déployées, je vais rester avec des caractères de 8 bits dans la base de données. – jrodenhi