お世話になります。
Windows 10 Pro
Delphi 10.1 Belrin
上記の環境でAndroidアプリを
開発しようと思っています。
サーバー上にある
Oracleデータベースを
Android端末で接続したいのですが
可能でしょうか?
因みに端末はWi-Fi接続可能範囲です。
お手数おかけしますが
アドバイスお願いいたします。
詳しくないのですが、
モバイル チュートリアル:モバイル アプリケーション開発(iOS および Android)
http://docwiki.embarcadero.com/RADStudio/Sydney/ja/%E3%83%A2%E3%83%90%E3%82%A4%E3%83%AB_%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%EF%BC%9A%E3%83%A2%E3%83%90%E3%82%A4%E3%83%AB_%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA%EF%BC%88iOS_%E3%81%8A%E3%82%88%E3%81%B3_Android%EF%BC%89
には、
「データベースへのアクセス」のところに、
・モバイル クライアントからエンタープライズ データベースに接続する(iOS および Android)
・モバイル アプリケーションで FireDAC を使用する(iOS および Android)
があるようです。
あと、有償の製品になりますが、
Devart社のUniDAC(iOSやAndroidで使えるのはProfessional Edition)
なども検討してみるのも、良いかもしれません。
igyさん お世話様です。
アドバイスありがとうございます。
サイトを見ていたのですが
価格などをお問い合わせしたいのですが
Devart社は日本語対応はしていないのでしょうか。
> Devart社は日本語対応はしていないのでしょうか。
英語のみ、みたいですが、
ComponentSource
https://www.componentsource.co.jp/
にて、日本円で購入可能です。
また、
UniDAC
https://www.devart.com/unidac/
にて、Trial版もダウンロードできるようです。
(ダウンロードできるのがProfessional Editionなのかは、不明なのですが・・)
技術的な質問は、Devart社のフォーラム(英語)
https://forums.devart.com/?_ga=2.3790512.1637689971.1601180501-1412651863.1598682927
があります。(もちろん英語で書き込む必要があります。)
>(ダウンロードできるのがProfessional Editionなのかは、不明なのですが・・)
と書きましたが、
Download UniDAC Trial
https://www.devart.com/unidac/download.html
の「SUPPORT INFORMATION」には、
> a dataset is limited to 6 fields for the iOS and Android platforms
とありますので、Androidでも試せそうですね。
なお、UniDACは、MySQLやPostgreSQLなども接続できるのですが、Oracleだけでいいなら、
同じ Devart社 の
ODAC
https://www.devart.com/odac/
の Professional edition とかも、あります。
igyさん、ご案内ありがとうございます。
やっぱり、英語のみの対応ですか・・・
敷居が高いな~
怖くて注文できそうにないです。
とりあえず、体験版で検証させていただきます。
igyさんにご案内いただきました
Devart社の「UniDAC 8.3 for RAD Studio 10.1 Berlin」をダウンロードして
私なりにが頑張ってはや6日目です。
WindowsアプリではUniDACコンポーネントを利用してoracle接続はできました。
しかし、肝心のAndroidデバイスでの接続でエラーが発生してできませんでした。
同じプログラムでターゲットプラットフォームをAndroidにしただけなのに
こんなことがあるのでしょうか。
> WindowsアプリではUniDACコンポーネントを利用してoracle接続はできました。
> しかし、肝心のAndroidデバイスでの接続でエラーが発生してできませんでした。
(外しているかもしれませんが、)
Oracle接続は、Direct modeで接続していますか?
また、同じようなエラーは、Devart Forums(UniDACやODAC)で、投稿されてたりしますか?
igyさん、お忙しところ お付き合いいただきまして
ありがとうございます。
DirectプロパティはFalseです。
ちなみにTrueにしても接続できません。
Devart Forumsも検索していましたが
見つかりませんでした。
Androidデバイスの設定に問題があるのでしょうか。
IPアドレスはOracle databaseのパソコンのIPアドレスのセグメントです。
oracle database(192.168.116.77)
Androidデバイス(192.168.116.98)
Wi-Fiルータ(192.168.116.1)
英語ができないのが・・・
さすがに、疲れてきました。
作りたいAndroidアプリは
Oracleデータベースのテーブルにアクセスして
SQLで指定レコードを抽出して
書き換えたい値を入力してOracle データベースにupdateする
単純なものです。
このような、ことをアプリを受託していただけるソフト屋さんは
ありますか?
かなり、追い詰められています。
> DirectプロパティはFalseです。
> ちなみにTrueにしても接続できません。
(実際、試していないのですが・・・)
私の予想だと、AndroidやiOSでは、Direct mode じゃないと接続できなのではないかと思います。
Platform Status
http://docwiki.embarcadero.com/PlatformStatus/en/Main_Page
を見ると、
Delphi 10.1 Belrinは、Android 7 まで対応で、
、UniDAC は Ver.8.3.1 で
> Oracle 20c is supported
となっているようです。
Androidのバージョンは何ですか?
また、エラーは、なんと表示してますか?
(そして、そのエラーは、どのタイミングで表示してますか?)
igyさん、お付き合いありがとうございます。
Anroidバージョン:6.0.1
Delphi 10.1 Belrin Enterprise update2
Oracle: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
Windows 10 PRO 64bit
エラータイミングは
デバック実行したときに発生します。
エラー内容は
プロジェクト TEST.apkは例外クラス Exception (メッセージ 'You are using UniDAC Traial edition! The maximum of
columns in a dataset is limited to 6 fiwlds.
You may register UniDAC at http://www.devart.com')を送出しました。
というメッセージです。トライアル版は6データセット制限というメッセージですが
このプロジェクトには「OracleUniProvider1」と「UniConnection1」コンポーネントしか
貼り付けておらず
このメッセージは合点がいきません。
因みに、UniConnection1のプロパティは
以下にしています。
Provider: Oracle
Server: ORCL
Username: USER1
Password: **********
Direct: True
例えば、カラム数が少ないテスト用のテーブルを作って、それに接続するだけのプログラムでも
その例外エラーは置きますか?
igyさん、お返事ありがとうございます。
テーブルには接続していません。
スキーマに接続しているだけです。
今、取引先に出かけたので
帰宅後、もう一度確認させて頂きます。よろしくお願いします。
igyさん、お返事が遅れまして大変申し訳ありません。
最初から作りました。
マルチデバイスアプリケーション(新規作成)→空のアプリケーション→ターゲットプラットフォームをAndroid(アクティブ化)
→スタイルをAndroid→Android7インチタブレット→OracleUniProvider1をフォ0ムに貼り付け
→UniConnection1をフォームに貼り付け→
→UniConnection1のプロパティを以下のようにする
Provider: Oracle
Server: ORCL
Username: USER1
Password: **********
Direct: True
→デバック実行
やはり、同様のエラーが発生します。
5日前にDevart社にも問い合わせしていますが
返事をいただけません。
(モバイル開発したことがないので、外しているかもしれませんが、)
デバッグ実行ではなく、通常の実行の場合も同じですか?
あと、環境があれば(そして、試す時間があれば)ですが、
MySQLかPostgreSQLなら接続できるかを試してみるのも・・
(Oracleとは、まったく関係ないので、あまり意味がないのですが、ちょっと気になったもので・・・)
igyさん、おはようございます。
通常の実行でも同様のエラーが発生しました。
また、MySQL、PostgreSQLの環境がないので試していませんが
SQLiteでの接続も同様のエラーが発生します。
ターゲットフォームをWindowsにすると問題ないのですが・・・
トライアル版は接続できないのかな???
Devart社に問い合わせしても返事を頂けないし・・・
Oracleデータベースのテーブルにアクセスして
SQLで指定レコードを抽出して
書き換えたい値を入力してOracle データベースにupdateする
単純なものを作成したいのですが
このようなアプリケーションを開発していただけるような
ソフト屋さん、ご紹介いただけないでしょうか?
> →UniConnection1のプロパティを以下のようにする
> Provider: Oracle
> Server: ORCL
Serverプロパティを oracle databaseのIPアドレス(192.168.116.77)にしても、同じですか?
あと、Databaseプロパティは、設定しなくても大丈夫なのですか?(Oracleは、ほとんどわからないので、外しているかもしれませんが・・)
igyさん、お付き合いありがとうございます。
Severプロパティに192.168.20.77や127.0.0.1をいれても接続できませんでした。
また、OracleデータベースではDatabaseプロパティの設定は不要です。
igyさんにご紹介頂いたUniDACは良さそうなツールで
なんとか使えたらな~と思っているのですが
厳しい状況です。
Trial版のみの不具合かもしれませんね・・
もしお時間があれば、以下を試していただけますか?
起動と同時に接続されている(UniConnection.Openなどで)と思いますが、
(1)接続しない場合も、エラーになりますか?
(2)ボタンをクリックしたら、接続するようにしてみた場合でも、エラーになりますか?
igyさん、毎々ありがとうございます。
コードではUniConnection1をコネクトしていません。
UniConnection1コンポーネントのconnectedプロパティがTrueになっていたので
Falseにし、デバック実行しましたがやはり同様のエラーが発生します。
とほほ・・・
接続しなくてもエラーが発生するとなると・・・
やはり、Trial版の不具合(モバイルでのみ発生)の可能性が大きいですよね。
他のPCでDelphi Community Editionをお使いなら、それに対応したTrial版をダウンロードして試したり、
別のAndroidの機種をお持ちなら、そちらで試したり、
・・・と思いましたが、Trial版自体の不具合なら、結果が同じになりそうですね・・・
igyさん、お世話になります。
AndroidデバイスをAQUOS PHONEにしても同様のエラーとなってしまいました。
>他のPCでDelphi Community Editionをお使いなら、それに対応したTrial版をダウンロードして試したり
明日、パソコンを再設定して試して 結果報告をさせて頂きます。
igyさんお世話になります。
Windows 8.1 Pro 64bit
Delphi EX5 Enterprise
の環境で試してみましたが
やはり接続できませんでした。
前に確認したときは、
デバッグ実行だけではなく、通常の実行でも、エラーが表示とのことでしたが、
このエラーの後は、アプリは終了してしまうのですか?
igyさん、お付き合いありがとうございます。
>このエラーの後は、アプリは終了してしまうのですか?
はい。エラーWindowsのOKボタンを押下すると終了します。
頭が混乱してパニックです。
今更なのですが、
このツールはWebサーバーなしで
接続できるのかな?
現在の環境は
Oracle databaseをインストールしてあるIPアドレスが192.168.116.77のパソコン と Wi-Fi親機(192.168.116.1) をLANケーブルで接続
Androidデバイス(192.168.116.98)とWi-Fi親機(192.168.116.1)を無線接続
なのですが、
諦めたいけど、悔しくて・・・
> はい。エラーWindowsのOKボタンを押下すると終了します。
これが終了しなければ、そこから接続ボタン等で、接続を試したりできるのかも・・
と思って、質問しましたが、終了してしまうのは残念ですね。
> このツールはWebサーバーなしで
> 接続できるのかな?
おそらくできると思って、まずはTrial版を勧めてみました。
接続しないでもエラーが出るということは、Trial版の不具合だと思うので、
Devartの公式フォーラムに(英語で)書き込んでみたら、情報が得られるかもしれません。
direct mode で接続する時は、serverプロパティにHost:Port:SIDとサーバー名(IPアドレス)以外に設定する必要がある見たいですがそこは大丈夫ですか?
まあ、接続しなくてもエラーが出るのは良く判りませんが出てる情報からすると接続設定が正しく無い様に見えます。
igyさん、auさん お付き合いありがとうございます。
助かっております。
ComponentSource社経由でDevart社にはメールで問い合わせしましたが、
テーブルのカラム数を6未満にしてくださいの一点張りです。
英語は難しいです・・・
auさんのアドバイスですが
下記のようにコーディングしましたが
*************************************************************
procedure TForm1.Button1Click(Sender: TObject);
var
UniConnection: TUniConnection;
begin
UniConnection1.ProviderName := 'Oracle';
UniConnection1.Username := 'UNIDACTEST';
UniConnection1.Password := '*********'; ←パスワードは隠ぺいしてあります。
UniConnection1.SpecificOptions.Values['Direct'] := 'True';
UniConnection1.Server := '192.168.20.77:1521:sid=orcl';
UniConnection1.Connect;
*************************************************************
UniConnection1.Connect; のところで
やはり、「The maximum number of columns in a dataset is limited to 6 fields. you may register UniDAC at http://www.devart.com」
というエラーが発生します
検証できていないけど
正規版を購入しようか迷っています。
博打だな~
> UniConnection1.Connect; のところで
> (中略)
> というエラーが発生します
接続しなくてもエラーと思っていたのですが、
この
> UniConnection1.Connect;
をコメントアウトして、実行しない場合は、エラーは表示しないですか?
igyさん、毎々お付き合いありがとうございます。
当初はUniConnectionコンポーネントのプロパティに直接書き込みして
デバック実行していました。
その時にエラーが発生していました。
色々試していた中でボタンイベントにプロパティをコーディングして試しています。
igyさんのご指導の件ですが
UniConnection1.Connect; をコメントアウトした場合はエラーが発生しませんでした。
ios、android版の試用版の制限としてデータセットの列数が6以下という制限があるようなので、まずはそう言うデータを用意してみてはどうでしょう?
auさん、お世話になります。
知識不足でスミマセン。
データセットというのはOracleでいうテーブルのことではないのですか。
スキーマ(ユーザー)の中にはテーブルが1つしかありません。
また、そのテーブルのカラム数は3つです。
恐らく参照先のテーブルじゃないかと思いますが、列数が3だと問題なさそうですね。
> 下記のようにコーディングしましたが
> *************************************************************
> procedure TForm1.Button1Click(Sender: TObject);
> var
> UniConnection: TUniConnection;
> begin
> UniConnection1.ProviderName := 'Oracle';
> UniConnection1.Username := 'UNIDACTEST';
> UniConnection1.Password := '*********'; ←パスワードは隠ぺいしてあります。
> UniConnection1.SpecificOptions.Values['Direct'] := 'True';
> UniConnection1.Server := '192.168.20.77:1521:sid=orcl';
> UniConnection1.Connect;
> *************************************************************
ちなみに、このコードですが、ターゲットがWindowsの場合、問題なく接続できますか?
igyさんお付き合いありがとうございます。
ターゲットをWindowsにすると
UniConnection1.Connect;
はエラーなくコネクトできます。
MySQLのサーバを用意しないで、以下のようなコードを実行し、
「The maximum number of columns in a dataset is limited to 6 fields. you may register UniDAC at http://www.devart.com」
とエラーになるか、
「サーバに接続できません」みたいなエラーになるか、確認してみるのも、よいかもしれませんね。
The maximum number of ...
と表示するようなら、テーブルのカラム数などに関係なく、エラーが出ていることになりますね。
procedure TForm1.Button1Click(Sender: TObject);
begin
UniConnection1.ProviderName := 'MySQL';
UniConnection1.Username := 'TEST';
UniConnection1.Password := '*********';
UniConnection1.SpecificOptions.Values['Direct'] := 'True';
UniConnection1.Server := '192.168.20.77';
UniConnection1.Database := 'MYTEST';
UniConnection1.Open;
end;
今のOracleのコードでも、
> UniConnection1.Server := '192.168.20.77:1521:sid=orcl';
で、IPアドレスを違うものでテストして、エラーメッセージが変わるか、確認するだけでもよさそうですね。
igyさん、お返事遅れまして申し訳ありません。
検証させていただきました。
まず、UniConnection1.Server := '192.168.20.77:1521:sid=orcl'; を実施しました。
結果、UniConnection1.Connect; のところで
「The maximum number of columns in a dataset is limited to 6 fields. you may register UniDAC at http://www.devart.com」
が発生しました。
次に、MySQLのサーバを用意しないでどのようになるかですが
UniConnection1.SpecificOptions.Values['Direct'] := 'True'; のところで
下記にエラーが発生しました。
「”Direct" is not a valid option name for MySQL UniProvider.」
MySQLは使用したことがないのですがDirect接続ができないようです。
プロパティにありませんでした。
> まず、UniConnection1.Server := '192.168.20.77:1521:sid=orcl'; を実施しました。
IPアドレスを違うもの(DBサーバと関係ないもの)を指定して接続しようとして、
The maximum number of ...
と表示するなら、Trial版の不具合でしょうね。
> MySQLは使用したことがないのですがDirect接続ができないようです。
> プロパティにありませんでした。
すみません。MySQLは、
> UniConnection1.SpecificOptions.Values['Direct'] := 'True';
は、不要でした。あと、MySQLUniProviderの追加が必要ですね。
私の環境(UniDAC Standard Edition)では、MySQLで接続するときは、デフォルトのままで Direct Modeで接続しているようです。
そして、MySQLサーバのサービスを止めてみて、接続しようとすると、
Cannot connect to server on host 'localhost'
対象のコンピューターによって拒否されたため、接続できませんでした。
Socket Error Code: 10061($274D)
と表示されました。
igyさん、下記コードを試させていただきました。
UniConnection1.ProviderName := 'MySQL';
UniConnection1.Username := 'TEST';
UniConnection1.Password := '*********';
// UniConnection1.SpecificOptions.Values['Direct'] := 'True';
UniConnection1.Server := '192.168.20.77';
UniConnection1.Database := 'MYTEST';
UniConnection1.Open;
*************************************************
UniConnection1.Open; のところで
「The maximum number of columns in a dataset is limited to 6 fields. you may register UniDAC at http://www.devart.com」
が発生しました。
トライアル版のバグですかね。
> トライアル版のバグですかね。
おそらくバグですね。
# もしかしたら、最新のDelphi 10.4 では発生せず、
# 古い Delphiでのみの発生する不具合かもしれませんが、
# いずれにしても、不具合に変わりないと思います。
igyさん、ありがとうございます。
製品版を購入しようとおもいます。
結果は後日、ご報告させていただきます。
igyさん、ご連絡遅れました。
寂しいお財布から思い切って製品版を昨日購入しました。
もし、接続できなかったらどうしようかと思っていましたが
コネクトできました。
やったー!
この喜びは久しぶりです。
これで、色々なことが挑戦できそうです。
この1カ月禁酒していましたが
今晩はお酒の飲もうかな。
igyさん、本当にありがとうございました。
ツイート | ![]() |