AndroidでOracle接続について

解決


ガオー  2020-09-18 19:54:02  No: 149154

お世話になります。
Windows 10 Pro
Delphi 10.1 Belrin

上記の環境でAndroidアプリを
開発しようと思っています。
サーバー上にある
Oracleデータベースを
Android端末で接続したいのですが
可能でしょうか?
因みに端末はWi-Fi接続可能範囲です。
お手数おかけしますが
アドバイスお願いいたします。


igy  2020-09-21 18:38:33  No: 149158

詳しくないのですが、

モバイル チュートリアル:モバイル アプリケーション開発(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)

があるようです。


igy  2020-09-25 15:58:24  No: 149179

あと、有償の製品になりますが、
Devart社のUniDAC(iOSやAndroidで使えるのはProfessional Edition)
なども検討してみるのも、良いかもしれません。


ガオー  2020-09-27 12:42:16  No: 149185

igyさん お世話様です。
アドバイスありがとうございます。
サイトを見ていたのですが
価格などをお問い合わせしたいのですが
Devart社は日本語対応はしていないのでしょうか。


igy  2020-09-27 13:26:31  No: 149187

> 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
があります。(もちろん英語で書き込む必要があります。)


igy  2020-09-27 13:31:21  No: 149188

>(ダウンロードできるのが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でも試せそうですね。


igy  2020-09-27 13:41:53  No: 149189

なお、UniDACは、MySQLやPostgreSQLなども接続できるのですが、Oracleだけでいいなら、
同じ Devart社 の
ODAC
https://www.devart.com/odac/
の Professional edition とかも、あります。


ガオー  2020-09-27 14:38:55  No: 149190

igyさん、ご案内ありがとうございます。
やっぱり、英語のみの対応ですか・・・
敷居が高いな~
怖くて注文できそうにないです。
とりあえず、体験版で検証させていただきます。


ガオー  2020-10-02 09:14:14  No: 149205

igyさんにご案内いただきました
Devart社の「UniDAC 8.3 for RAD Studio 10.1 Berlin」をダウンロードして
私なりにが頑張ってはや6日目です。
WindowsアプリではUniDACコンポーネントを利用してoracle接続はできました。
しかし、肝心のAndroidデバイスでの接続でエラーが発生してできませんでした。
同じプログラムでターゲットプラットフォームをAndroidにしただけなのに
こんなことがあるのでしょうか。


igy  2020-10-02 13:41:55  No: 149209

> WindowsアプリではUniDACコンポーネントを利用してoracle接続はできました。
> しかし、肝心のAndroidデバイスでの接続でエラーが発生してできませんでした。 

(外しているかもしれませんが、)
Oracle接続は、Direct modeで接続していますか?

また、同じようなエラーは、Devart Forums(UniDACやODAC)で、投稿されてたりしますか?


ガオー  2020-10-02 15:22:36  No: 149211

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する
単純なものです。
このような、ことをアプリを受託していただけるソフト屋さんは
ありますか?
かなり、追い詰められています。


igy  2020-10-02 15:42:36  No: 149212

> 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のバージョンは何ですか?
また、エラーは、なんと表示してますか?
(そして、そのエラーは、どのタイミングで表示してますか?)


ガオー  2020-10-02 16:02:13  No: 149213

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  2020-10-02 16:23:04  No: 149214

例えば、カラム数が少ないテスト用のテーブルを作って、それに接続するだけのプログラムでも
その例外エラーは置きますか?


ガオー  2020-10-02 17:07:25  No: 149215

igyさん、お返事ありがとうございます。
テーブルには接続していません。
スキーマに接続しているだけです。

今、取引先に出かけたので
帰宅後、もう一度確認させて頂きます。よろしくお願いします。


ガオー  2020-10-02 22:46:33  No: 149216

igyさん、お返事が遅れまして大変申し訳ありません。

最初から作りました。
マルチデバイスアプリケーション(新規作成)→空のアプリケーション→ターゲットプラットフォームをAndroid(アクティブ化)
→スタイルをAndroid→Android7インチタブレット→OracleUniProvider1をフォ0ムに貼り付け
→UniConnection1をフォームに貼り付け→
→UniConnection1のプロパティを以下のようにする
Provider:  Oracle
Server:  ORCL
Username:  USER1
Password: **********
Direct:  True
→デバック実行

やはり、同様のエラーが発生します。
5日前にDevart社にも問い合わせしていますが
返事をいただけません。


igy  2020-10-02 22:53:19  No: 149217

(モバイル開発したことがないので、外しているかもしれませんが、)
デバッグ実行ではなく、通常の実行の場合も同じですか?


igy  2020-10-02 23:05:29  No: 149218

あと、環境があれば(そして、試す時間があれば)ですが、
MySQLかPostgreSQLなら接続できるかを試してみるのも・・
(Oracleとは、まったく関係ないので、あまり意味がないのですが、ちょっと気になったもので・・・)


ガオー  2020-10-03 08:47:01  No: 149219

igyさん、おはようございます。
通常の実行でも同様のエラーが発生しました。
また、MySQL、PostgreSQLの環境がないので試していませんが
SQLiteでの接続も同様のエラーが発生します。
ターゲットフォームをWindowsにすると問題ないのですが・・・
トライアル版は接続できないのかな???
Devart社に問い合わせしても返事を頂けないし・・・

Oracleデータベースのテーブルにアクセスして
SQLで指定レコードを抽出して
書き換えたい値を入力してOracle データベースにupdateする
単純なものを作成したいのですが
このようなアプリケーションを開発していただけるような
ソフト屋さん、ご紹介いただけないでしょうか?


igy  2020-10-03 09:28:23  No: 149220

> →UniConnection1のプロパティを以下のようにする
> Provider:  Oracle
> Server:  ORCL

Serverプロパティを oracle databaseのIPアドレス(192.168.116.77)にしても、同じですか?

あと、Databaseプロパティは、設定しなくても大丈夫なのですか?(Oracleは、ほとんどわからないので、外しているかもしれませんが・・)


ガオー  2020-10-03 10:53:22  No: 149221

igyさん、お付き合いありがとうございます。
Severプロパティに192.168.20.77や127.0.0.1をいれても接続できませんでした。
また、OracleデータベースではDatabaseプロパティの設定は不要です。


ガオー  2020-10-03 10:55:50  No: 149222

igyさんにご紹介頂いたUniDACは良さそうなツールで
なんとか使えたらな~と思っているのですが
厳しい状況です。


igy  2020-10-03 11:25:12  No: 149223

Trial版のみの不具合かもしれませんね・・

もしお時間があれば、以下を試していただけますか?

起動と同時に接続されている(UniConnection.Openなどで)と思いますが、

(1)接続しない場合も、エラーになりますか?
(2)ボタンをクリックしたら、接続するようにしてみた場合でも、エラーになりますか?


ガオー  2020-10-03 16:25:49  No: 149224

igyさん、毎々ありがとうございます。
コードではUniConnection1をコネクトしていません。
UniConnection1コンポーネントのconnectedプロパティがTrueになっていたので
Falseにし、デバック実行しましたがやはり同様のエラーが発生します。
とほほ・・・


igy  2020-10-03 17:34:34  No: 149226

接続しなくてもエラーが発生するとなると・・・
やはり、Trial版の不具合(モバイルでのみ発生)の可能性が大きいですよね。

他のPCでDelphi Community Editionをお使いなら、それに対応したTrial版をダウンロードして試したり、
別のAndroidの機種をお持ちなら、そちらで試したり、
・・・と思いましたが、Trial版自体の不具合なら、結果が同じになりそうですね・・・


ガオー  2020-10-04 19:34:51  No: 149228

igyさん、お世話になります。
AndroidデバイスをAQUOS PHONEにしても同様のエラーとなってしまいました。

>他のPCでDelphi Community Editionをお使いなら、それに対応したTrial版をダウンロードして試したり
明日、パソコンを再設定して試して 結果報告をさせて頂きます。


ガオー  2020-10-06 16:03:31  No: 149229

igyさんお世話になります。
Windows 8.1 Pro 64bit
Delphi EX5 Enterprise
の環境で試してみましたが
やはり接続できませんでした。


igy  2020-10-06 16:25:28  No: 149230

前に確認したときは、
デバッグ実行だけではなく、通常の実行でも、エラーが表示とのことでしたが、
このエラーの後は、アプリは終了してしまうのですか?


ガオー  2020-10-07 15:42:43  No: 149236

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)を無線接続 
なのですが、

諦めたいけど、悔しくて・・・


igy  2020-10-07 16:20:24  No: 149237

> はい。エラーWindowsのOKボタンを押下すると終了します。
これが終了しなければ、そこから接続ボタン等で、接続を試したりできるのかも・・
と思って、質問しましたが、終了してしまうのは残念ですね。

> このツールはWebサーバーなしで
> 接続できるのかな?
おそらくできると思って、まずはTrial版を勧めてみました。

接続しないでもエラーが出るということは、Trial版の不具合だと思うので、
Devartの公式フォーラムに(英語で)書き込んでみたら、情報が得られるかもしれません。


au  2020-10-08 10:22:41  No: 149239

direct mode で接続する時は、serverプロパティにHost:Port:SIDとサーバー名(IPアドレス)以外に設定する必要がある見たいですがそこは大丈夫ですか?
まあ、接続しなくてもエラーが出るのは良く判りませんが出てる情報からすると接続設定が正しく無い様に見えます。


ガオー  2020-10-08 15:19:36  No: 149240

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
というエラーが発生します

検証できていないけど
正規版を購入しようか迷っています。
博打だな~


igy  2020-10-08 15:37:58  No: 149241

> UniConnection1.Connect; のところで
> (中略)
> というエラーが発生します

接続しなくてもエラーと思っていたのですが、

この
> UniConnection1.Connect; 
をコメントアウトして、実行しない場合は、エラーは表示しないですか?


ガオー  2020-10-08 16:05:18  No: 149242

igyさん、毎々お付き合いありがとうございます。

当初はUniConnectionコンポーネントのプロパティに直接書き込みして
デバック実行していました。
その時にエラーが発生していました。

色々試していた中でボタンイベントにプロパティをコーディングして試しています。
igyさんのご指導の件ですが
UniConnection1.Connect; をコメントアウトした場合はエラーが発生しませんでした。


au  2020-10-08 16:32:15  No: 149243

ios、android版の試用版の制限としてデータセットの列数が6以下という制限があるようなので、まずはそう言うデータを用意してみてはどうでしょう?


ガオー  2020-10-08 16:55:43  No: 149244

auさん、お世話になります。
知識不足でスミマセン。
データセットというのはOracleでいうテーブルのことではないのですか。
スキーマ(ユーザー)の中にはテーブルが1つしかありません。
また、そのテーブルのカラム数は3つです。


au  2020-10-08 17:04:34  No: 149245

恐らく参照先のテーブルじゃないかと思いますが、列数が3だと問題なさそうですね。


igy  2020-10-09 00:02:04  No: 149247

> 下記のようにコーディングしましたが
> *************************************************************
> 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の場合、問題なく接続できますか?


ガオー  2020-10-09 14:08:02  No: 149248

igyさんお付き合いありがとうございます。

ターゲットをWindowsにすると
UniConnection1.Connect;
はエラーなくコネクトできます。 


igy  2020-10-10 09:30:19  No: 149251

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;


igy  2020-10-10 09:33:52  No: 149252

今のOracleのコードでも、

> UniConnection1.Server := '192.168.20.77:1521:sid=orcl';

で、IPアドレスを違うものでテストして、エラーメッセージが変わるか、確認するだけでもよさそうですね。


ガオー  2020-10-10 18:39:49  No: 149253

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接続ができないようです。
プロパティにありませんでした。


igy  2020-10-10 19:07:43  No: 149254

> まず、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)
と表示されました。


ガオー  2020-10-11 20:06:02  No: 149259

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」  
が発生しました。 
トライアル版のバグですかね。


igy  2020-10-11 20:18:55  No: 149260

> トライアル版のバグですかね。

おそらくバグですね。

# もしかしたら、最新のDelphi 10.4 では発生せず、
# 古い Delphiでのみの発生する不具合かもしれませんが、
# いずれにしても、不具合に変わりないと思います。


ガオー  2020-10-12 10:09:08  No: 149261

igyさん、ありがとうございます。
製品版を購入しようとおもいます。
結果は後日、ご報告させていただきます。


ガオー  2020-11-03 20:39:32  No: 149308

igyさん、ご連絡遅れました。
寂しいお財布から思い切って製品版を昨日購入しました。
もし、接続できなかったらどうしようかと思っていましたが
コネクトできました。
やったー!
この喜びは久しぶりです。
これで、色々なことが挑戦できそうです。
この1カ月禁酒していましたが
今晩はお酒の飲もうかな。
igyさん、本当にありがとうございました。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加