Quantcast
Are you the publisher? Claim or contact us about this channel


Embed this content in your HTML

Search

Report adult content:

click to rate:

Account: (login)

More Channels


Showcase


Channel Catalog


Channel Description:

Blog entries categorized under Tips, Tricks and Techniques

older | 1 | .... | 5 | 6 | (Page 7) | 8 | 9 | 10 | newer

    0 0

    Da ich ja schon gestern auf die Möglichkeiten der (Ubuntu) Bash auf Windows 10 Creators Update und Delphi eingegangen bin, habe ich mal einen kleinen Performance Test gegenüber einer normalen Ubuntu-Installation gemacht.

    Dazu habe ich ein einfaches Quicksort benutzt:

    program QuickSort;
    {$APPTYPE CONSOLE}
    
    uses
      SysUtils,
      System.Diagnostics,
      System.Timespan;
    
    const
      maxLen = 100000000;
    
    type
      stip = array [1 .. maxLen] of integer;
    
    var
      i: integer;
      s: stip;
      Stopwatch: TStopwatch;
      Elapsed: TTimeSpan;
      Seconds: Double;
    
    procedure pQuickSort(var a: stip; lo, hi: integer);
      procedure sort(p, r: integer);
      var
        i, j, x, y: integer;
      begin
        i := p;
        j := r;
        x := a[(p + r) div 2];
        repeat
          while a[i] < x do
            i := i + 1;
          while x < a[j] do
            j := j - 1;
          if i <= j then
          begin
            y := a[i];
            a[i] := a[j];
            a[j] := y;
            i := i + 1;
            j := j - 1;
          end;
        until i > j;
        if p < j then
          sort(p, j);
        if i < r then
          sort(i, r);
      end;
    
    begin
      sort(lo, hi);
    end;
    
    begin
    
      Write('Init....');
      for i := 1 to maxLen do
      begin
        s[i] := Random(maxLen)
      end;
      WriteLn('Done');
    
      Stopwatch := TStopwatch.StartNew;
    
      Write('Sorting....');
      pQuickSort(s, 1, maxLen);
      WriteLn('Done');
    
      Elapsed := Stopwatch.Elapsed;
      Seconds := Elapsed.TotalSeconds;
    
      WriteLn;
      WriteLn(Seconds.toString);
      readln;
    
    
    end.

    Ergebnisse (getitelt aus 3 Durchläufen):

    • Ubuntu (direkt bzw als VM mit 4 CPUs/4 GByte RAM)
      17,43 / 17,22 / 17,10 Sekunden = 17,25 Sekunden
    • Bash on Windows (auf dem gleichen Rechner in einer separatem VM mit 4 CPUs/4 GByte RAM)
      17,65 / 17,45 / 17,43 Sekunden = 17,51 Sekunden

    Also praktisch kein "Leistungsverlust".

    Zusätzliche Test mit dem "Sieb des Eratosthenes", ein String-Replacement (wichtig für REST/JSON) und weiterer Arithmetik haben absolut vergleichbare Zahlen geliefert :-)

    Good job, Microsoft!

    NB: Der PAServer (auf Ubuntu) hatte keinen messbaren Einfluss auf der Ergebnis 


    0 0

    Wir sind wieder für Sie unterwegs und haben noch einige Plätze frei.

    Gewinnen konnten wir noch Bernd Ua von probucon Business Consulting, der mich in Berlin und Stuttgart unterstützen wird!

    Daher gibt es auch ein angepasste Agenda für Berlin und Stuttgart!

     

    Agenda, Anmeldung und Ort jeweils hier:

    25. April Leipzig (Volker Hillmann, adecc, C++ // Matthias Eißing, Embarcadero, Delphi)

    27. April München (Volker Hillmann, adecc, C++ // Matthias Eißing, Embarcadero, Delphi)

    11. Mai Berlin (Volker Hillmann, adecc, C++ // Bernd Ua, probucon, Delphi // Matthias Eißing, Embarcadero, Delphi)

    16. Mai Stuttgart (Bernd Ua, probucon, Delphi // Matthias Eißing, Embarcadero, Delphi // kein C++(!!))


    0 0

    Una sola consulta SQL, muchos motores… sabemos que FireDAC soporta múltiples motores, sin embargo y a pesar de que SQL sea un estándar, cada uno de los ya mencionados posee sendas particularidades… incluso en sus consultas, ¿Cómo afrontar esto?

    ¿Cómo ejecutarías una sentencia SQL en varios motores usando un mismo TFDQuery, cuando además esa sentencia tiene particularidades de utilización en cada motor… precisamente en lo que necesitamos hacer para obtener el resultado esperado?

    Por ejemplo: La clausula Limit funciona muy bien en SQLite, MySQL y PostGreSQL… sin embargo en Interbase y FireBird se llama First o Row (Aunque row no se comporta igual), en SQLServer se llama TOP y en Oracle hay que jugar con una especie de “campo oculto” llamado rownum… la siguiente tabla ilustra lo dicho en este párrafo, para que se vea la magnitud de la diferencia en el ejemplo expuesto:

    Motor de Base de datos Sentencia para Limitar el Número de Filas 
    SQLite, MySQL, PostGreSQL…  
    Interbase,  Firebird
     SQL Server
     Oracle  

    Y eso que este es sólo uno de tantos ejemplos que nos podemos encontrar.

    ¿Con tantas particularidades en los distintos motores de bases de datos, por más que FireDAC pueda conectarse a cuanto motor hay en el mercado cómo tendrías todo esto en cuenta en un solo TFDQuery?… seguramente (como a mí en algún momento) se te ocurra crear distintos TFDQuery en tiempo de ejecución con la sentencia correcta para cada motor y sí, es algo valido, incluso hasta organizado… aunque si necesitas mostrar esto en una grid o cualquier otro control, entonces ya la cosa se nos va alargando un poco y se va volviendo un poco compleja de mantener… que no es imposible y si eres organizado pues hasta te quedará super genial… pero las Directivas FireDAC, Sustitución condicional o pre-procesamiento de comandos (como decidas llamarle) son una alternativa que te invito a tenerla en cuenta, analiza sus pro, sus contra y cómo podrías mejorar su mantenimiento adecuándolo a tu necesidad y paradigma… quizá sea lo que necesitas, seguro que te ayudará a organizarte aún mejor.

    El siguiente es el vídeo que muestra su funcionamiento, espero les sea de utilidad.


    [YoutubeButton url='https://www.youtube.com/watch?v=y-9YVN-O7EU']

    0 0

    RAD Studio / Delphi / C++Builder のインストール (体験版のインストール)

    ここでは無料トライアル版を導入する手順を記載しておきます。RAD Studio / Delphi のフル機能を30日間、無料で試用することができます。すでにライセンスを購入している方は、ライセンス購入時にメール等で知らされる手順により導入してください。

    10.1 Tokyo のオンラインインストーラーが改善されてだいぶ早くなっています。「10.2 Tokyo で高速化された RAD Studio のインストールを実際に検証してみる [Japan]」 のブログににある通り、環境にもよりますが、約半分の時間でインストールできます。また、必要な機能だけ選択してインストールできるので、なおのことインストールにかかる時間を短縮できます。

    RAD Studio / Delphi / C++Builderについて

    RAD Studio / Delphi / C++Builderは、一つのソースで Windows, macOS, iOS, Android のアプリが作れるクロスプラットフォーム開発環境です。 ユーザーインターフェースも一つのマスターUIを作ることで、各デバイス、各OSに対応することができる大変なスグレモノであります。

    体験版とちょっと似ているけど目的の違うエディション「Starter Edition」について

    30日間、すべての機能を無料で使えるのが、体験版
    体験版とは別に、ずーっと無料で使え、Windows 32-bit アプリケーションを作ることのできる Starter Editionというものがあります。入門者、初心者などが Delphi/C++Builder を使ってプログラミングを覚えたい、というときには、体験版よりも 無料で使える Starter Editionがオススメです。Starter Edition を使いたい方はこちらをご参照ください

    それでは以下、体験版について、導入手順をご紹介します。

    ※インストール方法をご紹介するビデオを公開しています。こちらもご参考に。


    [YoutubeButton url='https://youtu.be/I-ZabVYVLZ0']

    体験版のダウンロードとインストール

    1. Windows 環境上のWebブラウザでエンバカデロのWebサイトを開きます。
    2. 上部ツールバーらしきところから[製品] - [RAD Studio] - [無料トライアル]を選択して、「トライアル版ダウンロードページ」を開きます。
    3. 必要登録事項を記入し(お名前、メールアドレス、アカウントパスワード、会社名、電話番号等)、[トライアルのダウンロード]ボタンをクリックします。
    4. 下記のような画面が表示されます。この画面で注目すべきところは以下二つ
      • トライアルライセンスキー(シリアルナンバー)が先ほど登録されたメールアドレスに送られているということ
      • インストーラーのダウンロードが始まっているので、それを保存しておくこと。ダウンロードが始まらない場合には、画面内に表示されているであろう「こちらをクリック」をクリックしてダウンロードをすること trialdownload.PNG
    5. インストーラーのダウンロードが終わったら、インストーラーを実行しましょう。ダウンロード後に表示される「実行」をクリックしても良いですし、ダウンロードフォルダ内にあるインストーラーをダブルくクリックしても良いです。
    6. インストーラーのウイザードに表示されるガイダンスに従ってインストールをすすめていきます。
    7. 下記画面の選択画面に来たら、「製品のSerial Numberをすでに入手している」を選んで、[インストール]をクリックします。
      image
      • シリアルナンバーなんて入手してないよ!というフレンズは、メールを確認してみてください。先ほどトライアル版をダウンロードする際に登録したメールアドレス宛に、「インストール番号」としてシリアル番号が届いているはずです。
    8. インストールが進んでゆきます…しばしお待ちを。
    9. 下記の「Embarcadero製品登録」が表示されます。[Serial Number]の欄に、メールにて「インストール番号」として届いている文字列を入力して[登録]ボタンをクリックしてください。 image
    10. 途中、RAD StudiuoがWindowsファイアーウォールでブロックされている旨のメッセージが表示されるかもしれません。その場合には「アクセスを許可する」を選んでおいてください。
    11. 「RAD Studio プラットフォーム選択」のウインドウが表示されます。ここで表示されているプラットフォームのリストについて簡単に説明しておきます。

      • Delphi Windows 64-bit Enterprise : Delphiを使ってWindows 64-bitで動作するアプリ、サーバサイドなどを構築できます。
      • Delphi Windows 64-bit Enterprise : Delphiを使ってWindows 32-bitで動作するアプリ、サーバサイドなどを構築できます。
      • Delphi OS X Enterprise : Delphiを使ってmacOS上でで動作するアプリを構築できます。
      • Delphi Linux Enterprise : Delphiを使ってLinux上でで動作するサーバーサイドロジックを構築できます。
      • Delphi iOS Enterprise : Delphiを使ってiOS上でで動作するアプリを構築できます。
      • Delphi Android Enterprise : Delphiを使ってAndroid上でで動作するアプリを構築できます。
      • C++Builder ~ となっているものは、上記のDelphiの説明と同じ機能が、C++Builderを使ってC++言語にて書けるものであります。C++使いはこちらもご利用ください。 image
    12. 上記のダイアログで必要なプラットフォームにチェックを着けたら(後でも追加インストールできるので、あんまり心配する必要はありません)、[続行]をクリックします。

    13. 「RAD Studio 追加オプション」のダイアログが表示されます。ここで表示されている追加オプションについてついて簡単に説明しておきます。

      • 追加の言語 : 言語のサポートパックです。日本語を利用するなら日本語言語パックを導入しておきましょう。
      • Samples : サンプルプログラムがインストールされます。インストールしておくこと推奨しますが、別途、ネット上のリポジトリから最新のサンプルをダウンロードして入手することもできます。
      • Help : インストールを推奨します。ヘルプファイルです。わからないことがあったらF1キーで呼び出せます。
      • IntraWeb : Delphi/C++Builderのドラッグアンドドロップを基本とした開発手法そのままにWebアプリの開発(サーバーサイドロジックの開発)を行うことができます。ただ、v4ベースなので、昨今のiOSアプリが求めるv6ベースには適合しません。
      • TeeChart Standard : グラフ、チャート作成表示コンポーネントライブラリです
      • DUnit Testing Frameworks : ユニットテストの作成と実行が行える
      • InterBase Express : IntarBaseというデータベースに接続ができるミドルウエア。現在はFireDACという強力なデータベース接続フレームワークがあるので、これからプロジェクトに取り掛かる人には必要なし
      • InterBase XE7 Developer Edition : データベース。開発者用。商用利用する際には、別途ライセンスが必要。 image
    14. 上記のダイアログで必要なオプションにチェックを着けたら(後でも追加インストールできるので、あんまり心配する必要はありません)、[インストール]をクリックします。

    15. インストールが進んでゆきます…しばしお待ちを。(インターネット上から必要なファイルをダウンロードしてインストールしているので、インターネット回線が切断されないようご留意ください。回線が切断されますと、のちにインストールが失敗する可能性があります)

    16. インストールが完了すると「操作が完了しました」と表示がされます。[作業開始]をクリックしてください。

    17. RAD Studio 10.2 Tokyo (2017年4月1日現在)が起動します。これでインストールは完了です。

    18. 追加の開発プラットフォーム、オプションをインストールしたい場合には、RAD Studio / Delphi / C++Builder を起動して表示されている上部ツールバーの[ツール] - [プラットフォームの管理...]をクリックしてください。 「RAD Studio プラットフォーム選択」ダイアログが表示され、プラットフォーム、追加オプションを選んで、インストールすることができます。

    image

    トラブルシューティング

    インストールしてたらエラーーが出ちゃったよ~!という方のためのトラブルシューティングをいくつか記載しておきます。

    • エラーが出た時点で、すでにRAD Studioのアイコンがデスクトップ上に出ていて、RAD Studioが起動できる状態になっている場合、上記の「手順18」に記載の方法で、「追加のプラットフォーム」のウインドウを呼び出して、そこで、インストールされていない開発プラットフォームのインストールを試みてみてください。
    • エラーが出た時点で、まだRAD Studioのアイコンがデスクトップ上にない場合には、「Windowsのプログラムと機能」を確認し、RAD Studioがインストールされた状態になっていれば、アンインストールしてください。その後、再度インストールを実施してください。
    • 再インストールを試みてもうまくいかないのであれば、一度、アンインストールの後、再度インストールすることで改善する場合もあるのですが、それでも、うまくいかない、という場合にはRAD Studioを手動でアンインストールしてきれいにしてから、再インストールすることでうまく行くこともあります。手動アンインストールの方法はこちらをご参照ください。

    以上


    0 0

    I've started to get requests to use FireDAC with Cloud Databases, like SQL Azure.  The question whether or not to put your business data in the cloud is getting easier and easier these days and a lot of that is thanks to Microsoft's investment in Microsoft Azure.  Microsoft's strategy to create an infrastructure, like Microsoft Azure SQL Database, that can manage big data (as big as petabyte-scale) and everything on down from that is working and it's working well. 

    In this post, we’ll see how FireDAC can connect and use a Microsoft SQL Azure database.

    For this post, I'll be using this Microsoft Azure SQL database called "mySampleDatabase" following the steps described here:

    MicrosoftAzure_1

    For the FireDAC connection we also need to know the Microsoft Azure Server name for the database, as we see here is:  firedac.database.windows.net

    MicrosoftAzure_2

    And lastly, we also need the Login and Password to connect to the SQL Azure database:

    MicrosoftAzure_3

    From the FireDAC docwiki on Connect to Microsoft SQL Server (FireDAC) it says:

    The FireDAC native driver supports Microsoft SQL Azure.

    And for Windows Client Software:

    FireDAC requires one of the Microsoft SQL Server x86 or x64 ODBC drivers to be installed on the workstation:

    • SQL Server ODBC driver as the connectivity for SQL Server 2000. Most likely, the ODBC driver is already installed on your workstation. If not, see details.
    • SQL Native Client as the connectivity for SQL Server 2000 and 2005. We strongly recommend that you have SQL Native Client installed, if your application has to work with SQL Server 2005. See Microsoft SQL Server Native Client.
    • SQL Server Native Client NN.N as the connectivity for SQL Server 2000, 2005, 2008, 2012, and SQL Azure. We strongly recommend that you have SQL Server Native Client NN.N installed, if your application has to work with SQL Server 2008, 2012, or SQL Azure. See Microsoft SQL Server 2008 Native Client.
    • SQL Server Native Client 11.0 as the connectivity for LocalDB.

    For my example, I'm using the SQL Server Native Client 11.0 for SQL Azure.

    The docwiki also tells us for the Driver Linkage:

    To link the driver:

     And lastly, the docwiki also includes this sample SQL Azure FireDAC connection string:

    • Connect to SQL Azure. Note the "@<server>" suffix in User_Name and the "tcp:" prefix in the Server parameters:
    DriverID=MSSQL
    Server=tcp:nasdfert6.database.windows.net
    Database=Northwind
    User_Name=addemo@nasdfert6
    Password=asd123zxc
    Encrypt=Yes
    MetaDefSchema=dbo
    MetaDefCatalog=Northwind

    So now we have all the information we need to create a FireDAC connection to our mySampleDatabase SQL Azure database.

    Using 10.2 Tokyo:

    1. Create a new Delphi or C++ Builder VCL or Multi-Device Application (Blank Application).

    2. Drop a FDConnection and a FDPhysMSSQLDriverLink component onto the form: 

    FDConnectionSQLAzure

    3. Double-click the FDConnection component to display the FireDAC Connection Editor:

    FDConnectionEditor

    In my case, the minimum needed parameters for FireDAC to connect to my SQL Azure database are:

    DriverID=MSSQL
    Server=tcp:firedac.database.windows.net
    Database=mySampleDatabase
    User_Name=EMBT@firedac
    Password=FireDAC!

    After entering these values in the FireDAC Connection Editor, you can click the TEST button to verify the Connection established successfully:

    FDConnectionTEST

    You can also select the Info tab on the FireDC Connection Editor, and verify the Connection definition parameters, FireDAC Info, Client Info (including showing the ODBC or Native Client driver being used), and Session Information:

    FDConnectionInfo

    4. Next, we can drop a FDQuery component onto the form:

    FDQuery

    5. Double-click the FDQuery component to display the FireDAC Query Editor and enter this SQL Command tab:

    SELECT TOP 20 pc.Name as CategoryName, p.name as ProductName

    FROM SalesLT.ProductCategory pc

    JOIN SalesLT.Product p

     

    ON pc.productcategoryid = p.productcategoryid;

    FDQuerySQLExecute

    6. Click the Execute button on the FireDAC Query Editor and verify that your data results get returned from the SQL Azure database:

    FDQueryResults

    7. To display the data results on our RAD Studio Client application, let's drop a TStringGrid component onto the Form:

    8. Using Visual Live Bindings, let's bind the results from the FDQuery to the TStringGrid.  Right-click on the Form and select Bind Visually... or on the Form Designer | right-click the TString component | Bind Visually:

    9. On the LiveBindings Designer, select the * member of the FDQuery component, and connect it to the * member of the StringGrid component:

    LiveBindingsDesigner

    10.  Using the Object Inspector, if you set the Active property of FDConnection and FDQuery to True, then you should see Design-Time data on the StringGrid, like this:

    FDQueryActive

    DesignData

    11.  Lastly, let's add a button on the Form, with Text property = "Get data SQL Azure".

    12.  Double-click the Button, and for the Button1Click event, let's call the Open method of the FDQuery, like this:

     procedure TForm2.Button1Click(Sender: TObject);

    begin

    FDQuery1.Open();

    end;

    13.  Run the application, click on the "Get data SQL Azure" button, and verify FireDAC connects to the SQL Azure database and returns data on the StringGrid, like this:

    SQLAzureRun 

    14.  Congratulations!   The steps in this post shows how easy it is to use FireDAC with Microsoft’s SQL Azure database!  We saw how easy it is to create a FireDAC connection to a SQL Azure database, connect to the SQL Azure database, and return data from the remote SQL Azure database to our RAD Studio multi-device or VCL clients. 

    [DownloadButton Product='RAD' Caption='To try FireDAC with Cloud Databases or any other supported database, please download RAD Studio and try it yourself']

     

     


    0 0

    ※この記事は 2016年の C++ Boot Camp Day4 で紹介した内容を Xcode8 のスクリーンショットで再編集したものです。

     

    ビルドしたアプリを iOS の実機にデプロイするには、原則として Apple Developer Program(以後、ADP と表記)の加入が必要です。これは Xcode を使う場合でも、RAD Studio / Delphi / C++Builder を使う場合でも同じです。しかし Xcode7 以降では ADP に加入していない場合でも所定の手順で環境構築することにより、ビルドしたアプリを目の前の実機にデプロイすることが可能となっています。

    そして、RAD Studio / Delphi / C++Builder でも、この設定に相乗りする形で開発したアプリを実機にデプロイ可能です。

    しかしながら、このための環境構築には少々の手間がかかる上に自由度は低く、本格的な開発には向きません。ADP に加入したほうが絶対にラクです。しかしながら、初めて iOS アプリを開発する方にとっては ADP の年費用を捻出するのは案外ハードルが高いものです。

    そこでこの記事では ADP 非加入の方が Xcode8 で 実機デプロイするための手順をスクリーンショット入りで説明します。なお、Delphi / C++Builder のユーザがモバイル向け開発を行うには Mobile Add-on Pack が必要です。お手元の環境がモバイル向け開発に対応していない場合は、参考資料としてお目通しいただければと思います。以下では Xcode インストール後の初回起動からの流れで手順を説明しています。


    0 0

    Nur schon vorab ein kleiner Hinweis:

    Der Termin für die zweite Deutsche CodeRage steht: Wir haben den 22. Juni 2017 festgemacht.

    Es erwarten einen eine Vielzahl von Vorträgen zu RAD Studio, C++Builder und Delphi. Aber auch konzeptionelle und praktische Vorträge.

    Die Deutsche CodeRage ist eine kostenfreie Onlinekonferenz, die auch diesmal in deutscher Sprache gehalten wird. Zur Zeit planen wir ein Programm von morgens (09:00) bis abends (19:00) mit unterschiedlichen Vorträgen. Sprecher werden sein: Dr. Holger Flick, Bernd Ua, Volker Hillmann, Roman Kassebaum, Matthias Eißing und noch weitere....

    Anmeldung und weitere Infos demnächst hier.


    0 0

    I run Delphi and C++Builder on a Mac, and I do this through Parallels, after switching from VMWare Fusion a few years ago.

    I've read requests before asking for instructions for how to run RAD Studio in a virtual machine, but it's pretty simple, something along the lines of:

    1. Install Windows;
    2. (Optionally) Put the VM into full-screen mode.

    The latter I prefer - both Fusion and Parallels have modes that try remove the Windows desktop and show app windows floating "integrated" into the Mac desktop.  I don't really like this, first because it never seems to work quite right, and second because I run all my apps fullscreen using macOS Spaces. Windows is thus just another fullscreen app, and you install RAD Studio as you normally would.


    Screen 1: only three spaces! This is unusual. Desktop 1: Skype, hidden. #2: this blog post and other Important Work. #3: Delphi! (#4 Hacker News, Ars Technica, other blogs. #5: Image editor. #6: Dedicated browser for subset of documents. #7 Browser with 30 tabs open. #8...)

    However the is one configuration option which is not obvious to set up, and that is handling Delphi / C++Builder keyboard shortcuts.

    Spaces vs Code Navigation

    Spaces slides a Space (a fullscreen app) left and right when you slide three fingers over the trackpad.  However it also slides a Space when using Ctrl+Arrow, which is a really useful shortcut when editing text, like code.  MacOS also opens Expose with Ctrl+Shift+Up Arrow and does something else with Ctrl+Shift+Down Arrow, which happen to be among the most useful shortcuts Delphi has: they jump between the declaration and implementation of a method.  (Only Ctrl+Shift+C for class completion is perhaps more amazing.)

    This means if you use Delphi or C++Builder in Parallels, you find yourself editing code and suddenly, without meaning to, switching to another application.  This is a tad frustrating.  And if you look around the virtual machine's configuration, you won't find an option to prevent it.  It turns out this is a Parallels-wide setting that applies to all VMs and has to be set in Parallels Preferences.

    1. Open Parallels Preferences.

    2. Navigate to Shortcuts

    3. Select OS X System Shortcuts

    You'll see 'Send OS X System Shortcuts', and it will most likely be set to Auto, which you might interpret as it doing the right thing.  It won't.  Select Always.  Now, all system shortcuts will be handled by Windows - and so by RAD Studio.

    Happy coding!


    0 0

    FireUI ライブプレビューとは?

    Delphi/C++Builder/RADStudioでマルチプラットフォーム向けアプリ開発を行う場合に便利な機能の一つが FireUI ライブプレビューですね。

    この機能は2016年にリリースされたバージョン 10.1 Berlin 以降でサポートされたものであり、IDE 上のデザインフォームで編集した画面デザインを実機上で即座に確認できるという、大変便利な機能です。

    ただしこの記事の目的はこの機能の紹介ではありませんので、機能自体に興味がある方は以下のリンクをご覧頂くのがよいでしょう。

    https://community.embarcadero.com/blogs/entry/fireui
    http://qiita.com/pik/items/e8f75f5df7238e5c0c73
    http://docwiki.embarcadero.com/RADStudio/Tokyo/ja/FireUI_%E3%83%A9%E3%82%A4%E3%83%96_%E3%83%97%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC

    Xamarin をご存知の方なら、Xamarin Live Player からアプリのデバッグや実行機能を除いたもの、と言えばイメージつきやすいかもしれません。(ただし、リリースの時期から言えば、Xamari Live Player は FireUI ライブプレビューよりも後にリリースされています。従って Xamarin Live Player は FireUI ライブプレビューの機能を参考にしつつ、さらに機能を追加したもの、と言うほうが適切かもしれません)

    しかし、FireUI ライブプレビューの機能は PC やネットワークの設定に不備があると期待したとおりに動作しないことがあります。この記事では正しく動作しない場合のトラブルシューティングについてご説明します。


    0 0

    この記事は、ITmediaのオルタナティブブログに掲載された記事の転載です。

    Delphiといえばネイティブ。CPUで直接実行でき、特別なランタイムが要らないというのは、ファーストバージョンが発売された22年前から変わらず、今はその特徴がモバイルを含むマルチデバイスに展開されているが、その特徴を活かした開発事例は、やはり制御系やグラフィック系が分かりやすい。

    ちょうど最近、その分野の事例がドイツから紹介された。いずれも鉄道関連だ。

    その1:ミニチュア ワンダーランド

    ハンブルクの有名なジオラマワールドらしい。残念ながら訪問したことはないが、「ミニチュアワンダーランド」でググるとお薦め観光スポットとして方々で紹介されている。鉄道、自動車、船舶、飛行機合わせて26万個以上の模型が昼夜1日のサイクル(15分とのこと)で動くとのこと。これらの制御に使われているのがDelphi。

    その2:3D Train Studio

    Nゲージとかで、精巧な鉄道ジオラマを作りたい。でも場所もないし...。という肩身の狭い鉄道模型ファンをバーチャルな世界で救うのがこれ。仮想空間にレールをひいて、駅や町をつくり、働く人を配置できる。そして、鉄道を走らせ、俯瞰でも運転席からも眺めることができる。秀逸なのは、視点によって聞こえる音も違うこと。トライアル版もあるので、ぜひ遊んでみてもらいたい。

    こちらのアプリは、エンバカデロの本社で主催しているクールアプリコンテストで2月に受賞したもの。同コンテストでは、面白いアプリがいくつも紹介されているので、ときどき紹介してみようと思う。

     


     

    0 0

    Frage: In Delphi 10.2 Tokyo/C++Builder 10.2 Tokyo soll es ja die Möglichkeiten geben, daß man auch JPEG Grafiken aus einer Datenbank direkt in einem TDBImage anzeigen lassen kann. Zur Design-Zeit sieht auch alles gut aus:


    (Eine FireDAC Tabelle mit einer JPEG Grafik)

    Zur Laufzeit bekomme ich aber einen blöden Fehler:

    Was mache ich falsch?

    Antwort: Fast alles richtig gemacht. Man muss nur noch eine Unit einbinden, die dann auch die Umsetzung (JPEG) macht:

    uses
    [....], VCL.Imaging.JPEG [...];

    Dann klappt's auch


    0 0

    Foren-Tage 2017: Call for Papers

    Die „Foren-Tage“ sind eine neue Veranstaltung für Entwickler, die mit Delphi- oder C++ arbeiten. Es ist eine gemeinsame Community-Veranstaltung der drei Delphi-Foren „Delphi-Treff“, „Entwickler-Ecke“, „Delphi-PRAXiS“ zusammen mit Embarcadero.

    Am Samstag, dem 23. September 2017  finden die Foren-Tage in der Hafenstadt Hamburg, im Besenbinderhof, St. Georg, Hamburg, statt.

    Die Foren-Tage sind die Community-Veranstaltung der deutschsprachigen Delphi- und C++Builder-Gemeinde. Der Veranstaltungsort in Hamburg ist fix gebucht und als nächsten Schritt in der Planung möchten wir die Agenda zusammenstellen. Dementsprechend sind wir auf der Suche nach Referenten.

    Was wir suchen ... 

    Was wir suchen, sind Themen, die sich im Wesentlichen um Delphi und C++Builder drehen oder Lösungen, die mit Delphi oder C++Builder realisiert wurden. Ebenfalls von Interesse sind technisch orientierte Themen, die helfen können, Wissenslücken zu schließen. Aber auch Meta-Disziplinen, mit denen sich ein Entwickler beschäftigen muss (oder sollte), wären geeignete Themen: Angefangen von der Frage, wie man plattformübergreifende Anwendungen erstellt, über die praktische Nutzung einer Versionsverwaltung für seine Quellcodes bis hin zu der Frage, welche verschiedenen Möglichkeiten es gibt, ein Setup zu erstellen und seine Anwendung sicher und fehlerfrei zum Kunden zu bekommen. Die hier genannten Stichworte sollen lediglich grob skizzieren, worauf wir scharf sind. Deiner Fantasie sind nur wenig Grenzen gesetzt. 

    Die Länge eines Vortrages sollte etwa 60 Minuten betragen. Wir planen dieses Jahr auch mal längere Vorträge anzubieten, um eine gewisse Vertiefung des Themas zu ermöglichen. Aufgrund der räumlichen Gegebenheiten werden wir darauf angewiesen sein, dass die vereinbarten Zeiten von den Referenten möglichst gut eingehalten werden. Wenn Du einen echten "Knaller" als Thema hast und ggf. vielleicht gemeinsam mit einer anderen Person referieren möchtest, können wir im Einzelfall auch darüber nachdenken, einen Vortrag auf 2 * 60 Minuten auszudehnen. Unser Wunsch ist es, über den Tag verteilt in bis zu drei Räumen insgesamt bis zu zwölf Vorträge anbieten zu können. 

    Ziel des Tages soll es sein, dass unsere Besucher am Ende herausgehen und entweder etwas Sinnvolles gelernt haben oder aber wenigstens mächtig Spaß hatten - im Idealfall sogar beides. 

    Was wir bieten ... 

    Was wir bieten, sind im Wesentlichen Ruhm & Ehre. Die Foren-Tage sind eine Community-Veranstaltung – oder anders formuliert: Unsere finanziellen Möglichkeiten sind begrenzt, da wir den Teilnehmern bewusst lediglich einen geringen Obolus abknöpfen. Wir werden Dir daher für Deinen Vortrag keinen Lohn zahlen können. 

    … und natürlich bieten wir – nach Berlin, Köln, Heidelberg, Leipzig, Bonn, Fürth – wieder eine der schönsten Städte Deutschlands. Hamburg ist eigentlich stets eine Reise wert und die Möglichkeit, einen Vortrag vor einem völlig zahmen und überaus wohlwollenden Publikum zu halten, ist nicht zu verachten. 

    Wie geht’s jetzt weiter ... 

    Wir möchten Dich bitten, Dir die Idee, auf den Foren-Tagen einen Vortrag zu halten, mal in Ruhe durch den Kopf gehen zu lassen. Wenn Du Dich dann dafür entscheidest, so schreibe doch bitte eine Handvoll Zeilen als Abstract zusammen (inkl. Angabe der Zielgruppe wie "Anfänger", "Fortgeschrittene“ oder „Experte") und sende dieses an call4papers@forentage.de – bis spätestens Ende Juli, denn danach wollen wir dann so schnell wie möglich Nägel mit Köpfen machen. Bis dahin ist alles noch im Fluss und wir werden zusehen müssen, dass wir am Ende zu einer ausgewogenen Agenda gelangen. Wir können daher im Moment niemandem verbindlich zusichern, dass er seinen eingereichten Vortrag auch halten kann und bitten hierfür um Verständnis. 

    Wenn wir jedoch Deinen Vorschlag in die Agenda integrieren konnten, werden wir Dich dann sehr schnell um Übersendung von Foto & Kurz-Lebenslauf zur Veröffentlichung auf unserer Webseite forentage.de bitten. Business-Lebensläufe sind okay, wenn Du aber die Möglichkeit hast, mit ein oder besser noch zwei Sätzen zu erläutern, woher man Dich aus der Delphi- oder C++Builder-Community kennen könnte, wäre das noch besser. Das schafft eine Bindung zwischen Dir als Referent und unseren Teilnehmern und dürfte Begehrlichkeiten wecken, Dich endlich einmal live zu sehen, nachdem man Dich bisher vielleicht nur gelesen oder Deinen Code gekla… verwendet hat. 

    ... Rückfragen? 

    Für weitere Informationen stehen wir Dir in den Foren (Delphi-Treff, Delphi-PRAXiS oder Entwickler-Ecke) oder auch via E-Mail (z.B. Daniel Wolf [daniel@delphipraxis.net], Matthias Eißing [Matthias.Eissing@embarcadero.com]) jederzeit zu Verfügung. Rufe, schreibe oder tickere uns an, wahlweise per Email, Telefon oder Skype.

    Sponsoring

    Für Fragen zum Sponsoring wendet Euch bitte an Sabine Rothe [Sabine.Rothe@embarcadero.com]

    ----------------------ENGLISH----------------------

    Call 4 papers - „Foren Tage“ 2017, 23rd September 2017, Hamburg, Germany

    The Foren-Tage is a three day conference like event, that we are arranging together with the three major Delphi forums here in Germany. It is now the 13th time that this event takes place and the number of attendees varies between 150 to 280. Last years we have been in Bonn, Leipzig, Berlin, Cologne, Hamburg and many more. In Germany the „Foren Tage" will be biggest Delphi event. It will take place from the 21st to the 23rd of September with its main event/conference on the Saturday (23rd of September). We are right now in the phase of getting the speaker slots together.

    If you are interested in speaking at Foren-Tage in Germany please send your proposal to call4papers@forentage.de .. Language at the conference is of course German but also English is general „accepted“ :-). End of July this call 4 papers will be closed.

    We do have a range of different offerings for speakers or sponsors. So if you are interested please contact us. For sponsoring inquiries please contact Sabine.Rothe@embarcadero.com

    http://www.besenbinderhof.com

    Official Website: www.forentage.de

     


    0 0

    Am Donnerstag, den 22. Juni, findet die Zweite Deutsche CodeRage Deutschland statt. Anmeldung und weitere Infos (Sessionplan) hier:

    http://forms.embarcadero.com/coderage-germany

    Die Konferenz deckt Entwicklungsthemen über allgemeine Programmierthemen, Delphi und C++Builder ab. Für Anfänger, Fortgeschrittene und interessierte Delphi und C++Builder Entwickler.

    Bekannte Sprecher wie Volker Hillmann, Bernd Ua, Roman Kassebaum, Olaf Monien, Dr. Holger Flick und Matthias Eißing bringen Ihnen kompakt die neusten Technologien, Tipps & Tricks, Paradigmen und Best Practices für Delphi und C++Builder nahe.

    Die Sprecher möchte ich hier kurz vorstellen:

    Olaf Monien

    Olaf Monien arbeitet seit vielen Jahren für internationale Firmen als IT Berater. Seine Spezialgebiete sind Software Architektur, Datenbank Design, Internet Anwendungen und mobile Geräte. Olaf Monien ist Diplom Informatiker mit über 20 Jahren Erfahrung im Bereich Softwareentwicklung. Olaf Monien ist ein Embarcadero MVP und  Embarcadero Technology Partner.

    Olaf hält den Vortrag

    • Implementation des Facebook Login-Verfahrens mit Firemonkey-Anwendungen auf Desktop und mobilen Plattformen

    Bernd Ua

    Bernd Ua ist Gründer und Geschäftsführer von probucon Business Consulting einem Beratungs- und Trainingshaus, das eine breite Platte von unterstützenden Dienstleistungen bei der Softwareentwicklung anbietet, angefangen von Trainings bis zu Architektur, Projektleitung, Codereviews und Umsetzung. Bernd Ua arbeitet seit mehreren Jahren als Softwarearchitekt und Entwickler sowie als Trainer im Bereich nativer Anwendungen mit Embarcadero Delphi und im .net Umfeld mit C#. Daneben ist er als Autor unter anderem für das Entwickler Magazin tätig und regelmäßig als Sprecher auf nationalen und internationalen Veranstaltungen anzutreffen.

    Bernd hält den Vortrag

    • Linux und Apache Entwicklung

    Roman Kassebaum

    Roman hat 1996 Pascal an der Universität Paderborn gelernt, wo er mit einem Master-Abschluss absolvierte. Er begann mit Turbo Pascal 7.0 und verwendete alle Versionen von Delphi von 1 bis zum aktuellen Delphi. In den letzten Jahren hat er auch mit dem C ++ Builder gearbeitet.

    Roman ist Delphi MVP und ein Embarcadero Technology Partner. Er arbeitete an verschiedenen Arten von Projekten in nationalen und internationalen Teams in Deutschland, Australien, USA, Frankreich, Spanien und Neuseeland.

    Während der letzten Jahre hat er spezielle Fähigkeiten in der Arbeit an Legacy-Code, vor allem bei der Migration zu neueren Delphi-Versionen, entwickelt.

    Roman lebt in Bünde mit seiner Frau und seinen Söhnen. In seiner Freizeit spielt er gerne Schach, wo er einen FIDE Meistertitel hält.

    Roman hält den Vortrag

    • Vorstellung von TMSPassKit

    Dr. Holger Flick

    Dr. Holger Flick studierte Informatik an der Universität Dortmund und promovierte an der Fakultät Maschinenbau der Ruhr-Universität Bochum. Bereits seit 1996 programmiert er mit Delphi. Holger ist Sprecher auf Fachkonferenzen und ein erfahrener Trainer für verschiedenste Delphi Themen. Sein jahrelanges Engagement und seine umfassenden Kenntnisse im Bereich der Delphi Programmierung im Themenbereich der objektorientierten Programmierung mit Delphi und anderen Programmiersprachen (z.B. C#, Objective-C), führte im Jahr 2016 zu seiner Ernennung zum Embarcadero Delphi MVP.

    Seit 2013 ist Dr. Holger Flick als Mitarbeiter der Korfmann Lufttechnik GmbH in Witten für die gesamte Software- und Hardwarearchitektur der Firma verantwortlich und entwickelt unter anderem unternehmensspezifische Softwarelösungen mit Delphi.

    Holger hält die beiden Vorträge

    • Komponentenentwicklung
    • FireDAC

    Volker Hillmann

    Volker Hillmann ist Geschäftsführer der adecc Systemhaus GmbH. Vielen Entwicklern ist er auch als Buchautor, Trainer und Sprecher auf vielen Roadshows (better office, Borland, Codegear, Embarcadero) bekannt. Er programmiert seit 1988 in C und seit 1991 in C++. Er kennt die Embarcadero (Borland / Codegear) C/C++ Entwicklungsumgebungen seit 1988 (Version Turbo C 1.5). Er beherrscht aber auch eine Reihe anderer Programmiersprachen und hat sich mit vielen Entwicklungsumgebungen beschäftigt. Die Basis hierfür bildet sein Studium als Diplom Mathematiker mit der Spezialisierung Datenbanken und Datensicherheit an der Universität Rostock. Im Auftrag des Markt&Technik Verlags hat er 1994 das Buch "Objektorientierte Programmierung mit C++. Das ganz andere C++- Buch" geschrieben. Er ist auch der Autor des White Papers für den Embarcadero C++ Builder 2010. Die theoretischen Grundlagen werden durch die vielen praktischen Erfahrungen aus Projekten im Finanz- und Versicherungsbereich bereichert. Auch hier basierte der Erfolg auf eher untypischen Ansätzen. Hier war er als Entwickler, Architekt und Projektleiter erfolgreich, bevor er sich 2001 mit seinem Geschäftspartner selbständig machte. Seit 2013 ist Volker Hillmann auch Embarcadero MVP für den C++ Builder und die Programmiersprache C++. Die adecc Systemhaus GmbH ist seit 2007 Partner von Embarcadero in Deutschland und betreut zahlreiche Kunden aus unterschiedlichen Wirtschaftszweigen in Deutschland, Österreich und der Schweiz. Neben Schulungen gehören hier auch Beratungsleistungen und die Beteiligung an Projekten dazu.

    Volker hält die Vorträge

    • Modernes C++ und Komponenten, ein einfacher Web- Server
    • Erstellen einer mobilen Anwendung (für Desktop-Entwickler)
    • Back to C++, Migration zurück zu C++

    Matthias Eißing

    Matthias Eißing ist Senior Sales Consultant der Embarcadero Germany GmbH. Mit über 20 Jahren Erfahrung im IT-Umfeld, als Sprecher auf zahlreichen nationalen und internationalen Konferenzen und Seminaren gilt Matthias Eißing als ausgewiesener Spezialist im Umfeld der Entwicklungs- und Datenbankwerkzeugen. Seine Schwerpunkte liegen in der Analyse, Beratung und Unterstützung von Kunden bei der Auswahl von Werkzeugen, sowie bei der projektbegleitenden Durchführung.

    Ich selber werde den Tag moderieren und diesen Vortrag halten:

    • Neuigkeiten im RAD Studio 10.2 Tokyo

    Ich freu mich auf Euch!

     


    0 0

    Frage: Ich habe folgenden Quelltext (stark vereinfacht dargestellt):

    var
      a,b,c : Integer;
    begin
      a := 1;
      b := 2;
      if (a<10) or (b<10) or (a+b<10) then
      begin
         c := 3;
         exit;  // <-----
      end;
      MachIrgendWas();

    Der Methodenaufruf "MachIrgendWas()" wird nur dann angesteuert, wenn das "exit" (siehe Pfeil) auskommentarisiert wird. Das hängt doch alles vom "IF" ab!!! Warum?

    Antwort: Zuerst muss man sagen, daß diese Darstellung hier ganz bewusst STARK vereinfacht dargestellt wird.... so daß dies dem ambitioniertem Entwickler sofort auffällt: Die IF-Bedingung wird immer erfüllt. Und damit wird auch immer EXIT aufgerufen. "MachIrgendWas" wird als Statement/Ausdruck damit gar nicht mehr übersetzt und mit in das Executable aufgenommen. Und der Compiler optimiert das einfach weg.

    Soweit, so einfach..... Trickreich wird das erst, wenn man komplexere Ausdrücke in der IF-Bedingung stehen hat, die man als normalsterblicher Programmierer nicht mehr sofort überblickt; die sich vielleicht aus Ausdrücken erst berechnen (die aber schon zur Compile-Zeit auswertbar sind).

    Also Augen auf, bei IF <Bedingung> then begin .... exit .... end!


    0 0

    Frage: Ich habe folgenden Quelltext (stark vereinfacht dargestellt):

    var
      a,b,c : Integer;
    begin
      a := 1;
      b := 2;
      if (a<10) or (b<10) or (a+b<10) then
      begin
         c := 3;
         exit;  // <-----
      end;
      MachIrgendWas();

    Der Methodenaufruf "MachIrgendWas()" wird nur dann angesteuert, wenn das "exit" (siehe Pfeil) auskommentarisiert wird. Das hängt doch alles vom "IF" ab!!! Warum?

    Antwort: Zuerst muss man sagen, daß diese Darstellung hier ganz bewusst STARK vereinfacht dargestellt wird.... so daß dies dem ambitioniertem Entwickler sofort auffällt: Die IF-Bedingung wird immer erfüllt. Und damit wird auch immer EXIT aufgerufen. "MachIrgendWas" wird als Statement/Ausdruck damit gar nicht mehr übersetzt und mit in das Executable aufgenommen. Und der Compiler optimiert das einfach weg.

    Soweit, so einfach..... Trickreich wird das erst, wenn man komplexere Ausdrücke in der IF-Bedingung stehen hat, die man als normalsterblicher Programmierer nicht mehr sofort überblickt; die sich vielleicht aus Ausdrücken erst berechnen (die aber schon zur Compile-Zeit auswertbar sind).

    Also Augen auf, bei IF <Bedingung> then begin .... exit .... end!


    0 0

    Frage: Meine IDE stürzt 'ständig' ab. Wo liegt das Problem? Wann erscheint ein Fix dafür?

    Antwort: Häufig (in weit mehr als 90% aller mir untergekommenen Fälle) ist daran eine IDE-Erweiterung, in Form eines Plug-Ins oder einer Komponenten-Sammlung, schuld. Das kann man zumindest rudimentär oder vollständig überprüfen.

    Wichtiger Hinweis: Ich zeige hier einige Bildschirmfotos von/mit "CnPack / CnPack IDE Wizards", die "Jedi Visual Component Library" (Binary Installer hier vorher die Jedi Code Library) und die "GExperts", die nur als Beispiel dienen. Ich möchte in keinster Weise diese IDE-PlugIns diskreditieren.

    Es kann durchaus sein, daß sich diese Plug-Ins / Komponentensammlungen mit der IDE beißen.... also erstmal testen, wie sich die IDE verhält, wenn diese nicht geladen werden. Dazu gibt es Kommandozeilenparameter für die IDE (BDS.EXE -parameter), die auch hier dokumentiert sind:
    http://docwiki.embarcadero.com/RADStudio/Tokyo/de/IDE-Befehlszeilenoptionen

    Hier findet sich nun ein Parameter, der die IDE in einer Standardkonfiguration startet: Parameter "r", wie "Registry"

    Man startet also die IDE mit diesem Parameter (Achtung: Keine Leerstelle/Space zwischen dem Parameter und dem beliebigen Namen):

    Microsoft Windows [Version 10.0.15063]
    (c) 2017 Microsoft Corporation. Alle Rechte vorbehalten.

    C:\Users\Matthias>"c:\Program Files (x86)\Embarcadero\Studio\19.0\bin\bds.exe" -rOhneIrgendwas

    Die IDE wird dann ohne PlugIns und Komponenten gestartet (Ausnahme GExperts, die sich festbeissen). Hier kann man nun überprüfen, ob es denn generell an einem PlugIn gelegen hat, wenn die IDE dann stabil läuft.

    Hintergrund: Es wird ein neuer Registry Zweig erzeugt mit den Standard-Einstellungen der IDE unter

    HKEY_CURRENT_USER\Software\Embarcadero\OhneIrgendwas

    Es werden dazu die Standardwerte von HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Embarcadero\BDS auf den CURRENT-USER-Zweig kopiert unter Zuhilfenahme des angegeben Registry-Zweigs:

    (Die GExperts tragen sich auch unter HKEY_LOCAL_MACHINE ein)

    Der Registry-Zweig "OhneIrgendwas" bleibt bestehen und kann jederzeit wieder über den Parameter -r benutzt werden. Man kann ihn aber auch in der Registry löschen

    Wo liegen die Einschränkungen ("nur rudimentäre Überprüfung")?

    Die Einschränkungen liegen darin verborgen, daß man ein bestehendes Projekt nicht mehr fehlerfrei/warnungsfrei öffnen kann, wenn man Komponenten benutzt


    0 0

    Frage: Wo sind die IDE-Plug-Ins "Beyond Compare" und "CodeSite Express" in der IDE?

    Antwort: Seit einigen Tagen sind diese über GetIt (Tools | GetIt-Package-Manager) verfügbar.

    Man findet diese leicht und schnell und der Kategorie "IDE Plugins":

    Was ist Beyond Compare?

    Beyond Compare ist ein sehr gutes Vergleichswerkzeug (diff, visual diff, Text-compare), mit dem man schnell und leicht Unterschiede in seinen (Text) Dateien feststellen kann. Dieses "plugged" sich dann auch in die IDE ein:

    Vorher (In der Historienansicht -> Unterschiede)

    Nachher:

    Dadurch öffnet sich der externe Betrachter:

    Dieser hat auch eine Vielzahl von Funktionen, die hier sehr gut beschrieben sind.

    (Es handelt sich dabei um Beyond Compare Lite 4 in einer "RAD Studio Edition; Version 4.1.5). Die Vollversion bietet auch außerhalb der IDE Möglichkeiten lokale Dateien, Verzeichnisse und auch binäre Dateien zu vergleichen.

    Was ist CodeSite Express?

    CodeSite Express ist ein Logging System, um zur Laufzeit herauszufinden, wie sich Code verhält und die gespeicherten Ergebnisse (nachträglich) zu betrachten. Dazu gibt es Klassen (wie TCodeSiteLogger). Es handelt sich hierbei auch um eine "Lite" Version ("Express"), die aber grundlegende Funktionen mitbringt. Unterschiede findet man hier. Eine Einführung ist in der Onlinehilfe integriert:


    0 0

    この記事は、Alternative Blogからの転載です。

    昨日、品川のマイクロソフトセミナールームで、CData Japan主催の「CData Day 2017」が開催されました。実は、この日のタイミングで、エンバカデロとCData Softwareは、Delphi / C++BuilderでCDataが提供する80以上のエンタープライズアプリケーション向けのアダプタを利用できるコンポーネント製品「Enterprise Connectors」を提供する提携を日本向けに発表したのです。その関係もあって、このイベントにお邪魔しました。

    cdataday.jpg

    CDataは、SalesForceやSAP、Office 365など、多様なエンタープライズサービス/クラウドサービスに標準的なSQLでアクセスできるアダプターを提供している。Enterprise Connectorsは、このアダプター機能をFireDACコンポーネントによって利用可能にしたものです。

    FireDACで使える?若干イメージしづらいかもしれませんが、Delphi / C++Builderでは、データアクセスをコンポーネントと呼ばれるプログラミング部品でサポートしています。Oracle、SQL Server、MySQLあるいはMongoDBのようなNoSQLも、同じコンポーネントによってアクセスできます。

    enterprise-connectors-fig.png

    実はこのしくみの背後にある、Delphiのファーストバージョンからあるデータセットオブジェクトの考え方が秀逸だと思っています。というのは、データアクセス方式がなんであれ、テーブルやクエリーの結果セットなどはTDataSet、その中の列はTFieldというインターフェイスで表現されるので、UIやコード上の処理は、接続方式、データベースの種類、データ型に関係なく統一化されるのです。

    CDataによる多様なエンタープライズサービスへのアクセスの統一化が、FireDACによってさらにカプセル化されることで、その先のデータ処理やUI要素での表示、編集、更新までが統一され、ビジュアル開発の恩恵を受けられるということなのです。

    クライアントサーバーアプリケーション開発の切り札として90年代に登場したDelphiですが、ここ数年マルチデバイス開発環境へと進化してきました。世の中は、モバイル活用などは普通のこととなり、今は、その先、つまり多様なアプリケーションをAPIで連携してすばやく柔軟にサービスを提供する時代となっています。

    Delphiが次の進化を見せるのは、この分野だと考えており、その大きな一歩がEnterprise Connectorsによる接続性なのです。乞うご期待。

    詳細は、7月28日東京、8月1日大阪のデベロッパーキャンプで。


    0 0

    Die Foren-Tage sind eine mehrtägige Community-Konferenz für Software-Entwickler. Veranstaltet werden die Foren-Tage von den drei Delphi-Foren „Entwickler-Ecke“ und „Delphi-Treff“ und „Delphi-PRAXiS“ zusammen mit Embarcadero. Wir sind im Wesentlichen das Team, das von 2005 bis 2015 die Delphi-Tage realisiert hatte. Von der Community für die Community! Wir freuen uns auf Euch am 21.-23. September 2017 in Hamburg In diesen Jahren haben wir Erfahrungen gesammelt, die wir in die Foren-Tage einfließen lassen, die aus unserer Sicht nun die Weiterentwicklung dieser Veranstaltungsreihe darstellen. Die zentrale Idee dieser Veranstaltung ist es, der (deutschsprachigen) Delphi- und C++-Community eine Möglichkeit zu eröffnen, sich live und von Angesicht zu Angesicht auszutauschen. An mehreren Tagen werden wir Workshops und interessante Vorträge erleben, Spaß und gegenseitiger Austausch von Wissen werden dabei im Mittelpunkt stehen

    Die Veranstaltung ist soweit in trockenen Tüchern und die Tickets sind nun für die Foren-Tage in Gänze verfügbar:

    Hauptveranstaltung am Samstag:
    https://www.xing-events.com/forentage.html

    Community Abend am Freitag Abend:
    https://en.xing-events.com/community_abend_forentage.html

    Workshop-Tage am Donnerstag/Freitag:
    https://en.xing-events.com/WorkshopsForenTage2017.html

    Weitere Infos:
    https://forentage.de

    Agenda (vorläufig):
    https://forentage.de/index.php/veranstaltung/agenda/

     


    0 0

    Frage: Ich vermisse die Funktion XYZ in InterBase. Warum gibt es die nicht?

    Antwort: In der Tat gibt es einige Funktionen in InterBase (für die DML) in InterBase, die man vielleicht von anderen Datenbanken her kennt, die aber in InterBase nicht vorhanden sind.....

    Aber es gibt eine (einfache!) Lösung: Man schreibt sich diese Funktion(en) selbst.

    Ein gutes Video von meinem Kollegen Stephen Ball findet man dazu auch hier: https://www.youtube.com/watch?v=9bfaU5mdlaY

    Daraus erstmal zwei wichtige Regeln:

    • Eine UDF sollte simple und schnell sein
    • Eine UDF sollte niemals den Status der Datenbank direkt manipulieren

    Ein kleines Beispiel: In MS SQL Server/T-SQL gibt es einen ISNULL() oder auch im MySQL ein IFNULL(). Diese kann man zwar auch mit einem CASE umschreiben, macht es aber unter Umständen weniger gut lesbar:

    Interbase Original:

    SELECT
        (CASE
        WHEN column IS NULL
        THEN 'Alternative Value'
        ELSE column
        END) AS column
    FROM
        table

    Der Wunsch könnte sein:

    SELECT
        ISNULL(column,'Alternative Value') AS column
    FROM
        table

    Sieht besser aus.... ist aber in InterBase nicht direkt möglich. Dafür gibt es UDFs (User Defined Functions).

    Wie baut man das jetzt ein? Über eine DLL (32/64 Bit) bzw ein SO (Shared Object für Linux/Mac), die man in das passende InterBase Verzeichnis kopiert (hier: Windows, 64 Bit): C:\\Program Files\\Embarcadero\\InterBase\\UDF

    Schritt für Schritt:

    • Delphi starten (oder C++Builder)
    • Datei | Neu | Weitere
    • Dynamische Link-Bibliothek
    • Date | Neu | Unit - Delphi
    • Hier, in der Unit, implementiert man dann die Funktionen im Interface- und Implementation-Teil der neuen Unit
    • Zielplattform wählen/ergänzen (32/64 Bit, Windows/Linux/Mac)
    • Export der Funktionen
    • DLL erzeugen

    Quelltext der DLL  / Unit

    library myUDFs;
    
    uses
      System.SysUtils,
      System.Classes,
      UUDFFunctions in 'UUDFFunctions.pas';
    
    {$R *.res}
    
    begin
    end.
    
    unit UUDFFunctions;
    
    interface
    
    function IsNull(s1, s2: PChar): PChar; cdecl;
    
    exports IsNull name 'IsNull';
    
    implementation
    
    function IsNull(s1, s2: PChar): PChar; cdecl;
    begin
      if string(s1) = '' then // es gibt keinen NULL String
        result := s2
      else
        result := s1;
    end;
    
    end.

     

    Wichtige Bemerkungen bei der Variablenübergabe:

    • Alle Variablen werden von InterBase als Referenzparameter übergeben
    • Ausnahme: PChar (Zeichenketten werden generell als PChar übergeben), die damit schon selbst eine Referenz darstellen.
      Also ein function irgendwas(var i:Integer;s:PChar)

    Der Import mittels SQL-Befehl in iSQL / IBConsole:

    DECLARE EXTERNAL FUNCTION IsNull
      CSTRING(256) CHARACTER SET NONE,
      CSTRING(256) CHARACTER SET NONE
    RETURNS CSTRING(256) CHARACTER SET NONE
    ENTRY_POINT 'IsNull' MODULE_NAME 'MyUDFs';

    Bemerkungen zu den Funktionsnamen und der UDF selbst

    • Der Funktionsname und der Entry-Point können gleich heissen! Müssen aber nicht (hier heisst alles "IsNull")
    • IsNull heisst die Funktion in der Delphi-Unit, die als "IsNull" exportiert wird und auch dem InterBase-System wird diese als IsNull bekanntgegeben.
    • Der DLL-Name kann ohne den Zusatz ".DLL" angegeben werden
    • Die UDF sollte/kann im \UDF-Verzeichnis der InterBase-Installation liegen, kann aber auch in eine spezifiziertem Verzeichnis ("EXTERNAL_FUNCTION_DIRECTORY Parameter der IBCONFIG liegen)
    • Die DECLARE gilt immer nur für die verbundene Datenbank! Jede UDF muss in jeder Datenbank(Datei) deklariert werden
    • Die Funktionen sieht man auch in der IBConsole:

    Anschliessend funktioniert auch ein IsNull in InterBase

    SELECT isnull(A."SPALTE",'Nix drin') AS RESULT
    FROM
    "TABELLENNAME" A;

    Die Möglichkeiten sind damit (fast) unendlich.....

    Source: myUDFs


older | 1 | .... | 5 | 6 | (Page 7) | 8 | 9 | 10 | newer