VB.NET始めました

プログラムの.netへの移行はじめました
オブジェクトとかクラスとかインスタンスとか幽霊のようなものを勉強しないといけません

あえて枝葉末節から
VBAで使っていた資産が使えるのか?
html workshop で作ったchmファイルはVBAの物をそのまま使いますが
Alias.h と Map.h を追加
Aliasに
topic1=index.html
Mapに
#define topic1 100
等書いてworkshopプロジェクトに追加してコンパイル

VB.NETでフォームにコンポーネントからhelpproviderをdrug&drop
プロパティのhelpnamespaceにchmファイルのパス入力
ヘルプボタン作成しクリックイベントは
Help.ShowHelp(Me, “chmのパス”, HelpNavigator.TopicId, “100”)

まだ方法あると思いますがとりあえずです。

文字

文字は良くわからないです

VBAのasc関数で asc(“文字”) は 文字のshift_jisコードを返すようですがなぜそれがascなのかよくわかりません

甘んじて受け入れて
SQLserverにはasc関数はない、ascii関数がある。ではこれはutf8かutf16コードを返すのだろうと妄想するとこれは間違い
アスキーコードを返す

SQLserverにはunicode関数がある。調べると文字のunicodeを返すと出てくる。unicodeは文字の集合でコードではないと覚えたけどと混乱

SQLserverで
unicode(‘、’)は12289
VBAで
ascw(“、”)は12289
12289は16進数にすると3001でコード表では「、」のutf16コード
ますます混乱

うちの環境では
VBAのasc関数はsjisのコード ascw関数はutf16のコードが返ってくる
SQLserverのascii関数はunicodeを返すらしいがutf16のコードと同じ値が返ってくる
ではunicode=utf16なのかというとそうではないと覚えていたのだが・・
宿題にします。

複数ステップのOLEDBエラー nvarchar(max) 改行

SQLserverテーブルのnvrachar(max)のカラムに対して
ODBC接続のレコードセット取って

Str=”文字” & vbCrLf
rs!カラム=Str
rs.update
など更新や追加行うと複数ステップの・・・エラー

OLEDB接続では起きない
nvarchar(max)をmaxを500など変更すれば起きない
cn.execute “insert into・・・values・・・” では起きない

サロゲートペア SQLserverの場合

以前もMySQLで書いたけど
AccessからSQLServerへサロゲート文字保存について

AccessはVBエディターに表示はできないけどテーブル、フォームに表示保存可能
SQLserverも保存できる

接続文字を書いてexecuteメソッドで
insert into Table(column) values(“サロゲートペア文字”)
とVBAから更新クエリ発行すると保存できない

OLEDBはだめ
oledbはhttps://docs.microsoft.com/ja-jp/sql/connect/oledb/features/utf-16-support-in-oledb-driver-for-sql-server?view=sql-server-2017
難しいけどだめだと書いてあるようです

ODBCならといろいろ試したけどこれも今のところだめです
ODBCからリンクテーブルにしてフォーム作って入力すると可能なのだがなぜ?
接続文字列にオプションか何かあるのかな?引き続き要調査