布団が俺を呼んでいる

丘山大一のぶろぐ

Firebird のお勉強 BULK INSERTの使い方

よくわからなかった個所をお勉強。
あ、Embeded環境です。

使い方

TABLE1の定義はこんな感じ
KEY_ID VARCHAR(8),
NAME VARCHAR(20)

isql.exe
SET NAMES SJIS_0208;
Use CONNECT or CREATE DATABASE to spcify a database
SQL> CONNECT hoge.ftb
CON>user 'SYSDBA' password 'masterkey';
Database: hoge.ftb User: SYSDBA
SQL> SET BULK_INSERT INSERT INTO TABLE1 (?,?);
BULK> (0,0);
BULK> (01,'hoge');
BULK> ('001','hoge');
BULK>
SQL> Commit;

便利そうなところ

普通のINSERT 文では、「'」でくくらないと文字列として扱ってくれません。
そのため、
INSERT INTO TABLE1 (KEY_ID,NAME) VALUES (01,'hoge');
と放り込むと、「01」が「1」と解釈されます。
BULK INSERT では、「'」で囲わなくても、「01」と解釈してくれます。
このあたりは、ファイルから値を入れることを想定した動きのように思えます。

悩みどころ

SJIS_0208 で接続しているためでしょうか、Unicode で定義されていても、SJISで定義されていない文字をINSERT できません。
たとえば、「💛」などは、「?」となります。
ちなみに、普通のInsert文を投げると、「💛」でエラーとなります。
ファイルからデータを入れようと思うと、コレがネックになるおそれがあります。
※正しく入ってくれない + エラーで落ちてくれない のは検証がつらい
UTF-8で接続できれば殆ど解決すると思うのですが……できないのだろうか……。



Firebird 徹底入門

新品価格
¥4,104から
(2016/7/14 23:43時点)

コメント (1) -

SJIS_0208はUnicodeにすべての文字をマップできていないので、
SJIS_0208ではなくcp943cを使うようにしてください。

http://tracker.firebirdsql.org/browse/CORE-1324

コメントを書く

布団が俺を呼んでいる | 別プロセスのスクリーンショットを取得する

布団が俺を呼んでいる

丘山大一のぶろぐ

別プロセスのスクリーンショットを取得する

自分メモ。

using System;
using System.Diagnostics;
using System.Drawing;
 
namespace ConsoleApplication1
{
    class Program
    {
        private struct RECT
        {
            public int Left;
            public int Top;
            public int Right;
            public int Bottom;
        }
 
        [System.Runtime.InteropServices.DllImport("User32.dll")]
        private static extern bool PrintWindow(IntPtr hwnd, IntPtr hDC, uint nFlags);
        [System.Runtime.InteropServices.DllImport("User32.dll")]
        private static extern bool GetClientRect(IntPtr hWnd, out RECT lpRect);
 
        static void Main(string[] args)
        {
            //ハンドルの取得
            var targetProccess = Process.GetProcessesByName("devenv")[0];//ここでは最初の一つを対象にした
            var handle = targetProccess.MainWindowHandle;
            //保存対象の画像処理
            var rec = new RECT();
            var size = GetClientRect(handle, out rec);
            var img = new Bitmap(rec.Right - rec.Left, rec.Bottom);
            var memg = Graphics.FromImage(img);
            IntPtr dc = memg.GetHdc();
            PrintWindow(handle, dc, 0);
            memg.ReleaseHdc(dc);
            memg.Dispose();
            //画像保存
            img.Save("画像.png");
        }
    }
}

WIn32API 使用です。



Windows 100% 2014年 01月号 [雑誌]

中古価格
¥1から
(2017/6/4 21:00時点)

コメントを書く