木曜日, 10月 08, 2015

PowerBuilder 12.6, C#: データベースへの接続方法

PowerBuilder でデータベースへ接続する方法を示します。

DataObject が機能していることが前提です。

SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "ConnectString='DSN=<server name>;UID=<user name>;PWD=<password>'"
CONNECT;
If SQLCA.SQLCode=-1 Then
MessageBox("Error","Database connection error")
HALT CLOSE
End If
dw_zip_code.SetTransObject( SQLCA )
string zip
zip=sle_zip_code.Text
dw_zip_code.Retrieve(zip)
DISCONNECT;

C# でいうと以下のようなコードとなります。

using (OdbcConnection connection = new OdbcConnection(Properties.Resources.DatabaseConnectionParam))
{
try
{
string zip = "55555";
if(0<args.Length)
zip=args[0];
connection.Open();
string sql = "Select * from zipcode_usa where zip_code='"+zip+"';";
OdbcDataAdapter adapter = new OdbcDataAdapter(sql, connection);
DataSet dataSet = new DataSet();
adapter.Fill(dataSet);
DataTable table = dataSet.Tables[0];
for (int i = 0; i < table.Columns.Count; i++)
{
Console.Write(table.Columns[i].ToString());
Console.Write(": ");
Console.WriteLine(table.Rows[0][i]);
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
view raw USZip.cs hosted with ❤ by GitHub


月曜日, 10月 05, 2015

PowerBuilder 12.6: 画像ファイルを読み込む

PowerBuilder で画像ファイルを読み込む方法を示します。というか、そのままじゃだめなんですね。

PictureControl とかがあって、じゃあ置いておけばあとで そのまま読んでくれとかファイル名を渡す、そういう形式だと思っておりました。

C# だとかそうですよね。

ところが FileRead() だと 32KB しか読まないらしいわけです。手元の情報だとそれだけしかないんですが、どこか見てるところが間違えてるんでしょうか。



まあいいんですが、バッファが必要なら書くまでです。

こんな感じで書くと画像ファイルが読み込めます。blob で読み込んで渡してやれば表示してくれます。

integer fp, err
blob buf, b
long flen
string filename
int loops, i
string pathname
int result
result = getFileOpenName("Open image file", pathname, filename, "BMP", "BMP Files (*.BMP),*.BMP,")
if result=1 then
flen=fileLength(pathname)
fp = fileOpen(pathname, StreamMode!, Read!, Shared!)
if fp<>-1 then
if 32765 < flen then
if Mod(flen,32765)=0 then
loops=flen/32765
else
loops=(flen/32765)+1;
end if
else
loops=1
end if
for i=1 to loops
err=fileRead(fp,b)
buf=buf+b
next
p_1.SetPicture(buf)
end if
fileClose(fp)
end if

PowerBuilder 12.6: UTF-8 ファイルを読み込む

ひょんなことで PowerBuilder プロジェクトの案件を扱うこととなりました。ので、関連情報など載せていきたいと思います。

まずは IDE など勝手が違うので、多少の忍耐が必要です。

日本語のファイルを扱うのでまずはまってしまったので、まずはファイルの読み書きから書いていきたいと思います。

UTF-8 ファイルを読む方法です。

integer fp, err
blob buf
string pathname="text.txt"
fp = fileOpen(pathname, StreamMode!, Read!, Shared!)
if fp<>-1 then
err = fileRead(fp, buf)
ie_1.Text=string( buf, encodingUTF8!)
fileClose(fp)
end if

UTF-8 ファイルはこれで読み込めます。

書き込みは以下の通りです。

FileOpen で文字コード EncodingUTF8! を指定します。

string filename, pathname
integer result
string str
integer fp, err
result = getFileSaveName("Save file as", pathname, filename, "TXT", "Text Files (*.TXT),*.TXT,")
if result=1 then
fp = fileOpen(pathname, LineMode!, Write!, LockWrite!, Replace!, EncodingUTF8!)
if fp<>-1 then
str=ie_1.Text
err = fileWrite(fp, str)
fileClose(fp)
end if
end if

Qt: 外部プログラムを起動する

  Qt/C++ のアプリは、外部へ直接アクセスできます。これはネットアプリでは不可能な Qt のメリットです。 外部プログラムを起動することもできます。QProcess::startDetached() を使うと独立したプロセスを立ち上げることができます。 この QProces...