HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 ファイル一覧 検索 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■13313 / inTopicNo.1)  桐+SQLServerExpress奮闘記
  
□投稿者/ ななーし -(2022/06/14(Tue) 15:46:53)
    質問ではありません。ある程度形にできたので手順と感想を書き込もうと思います。
    (不適切なら消します)
    @初期設定⇒13247番で検索ください。ODBCのシステムDSNは桐を扱うPCすべて設定が必要
    ASQLの主キー対策⇒タイムスタンプで対応しました。時間+ユーザ名でミリ秒まで取得することでだれがいつ記入したかを記録しながらユニークに(以下参考)
    [Timestamp]=#文字置換(#日付( #年月日 , 1 ),"-","")+#文字列(#時(#時刻),2)+#文字列(#分(#時刻),2)+#文字列(#秒(#時刻),2)+#文字列(#ミリ秒(#日時値),4)+#ユーザ名
    連番登録時はミリ秒を#行番号や#回数(繰り返し行追加の場合)に変えて登録すれば1秒で連続登録できないのでユニークになります。行挿入前or終了前イベントで項目値訂正で書き込んでください。ユニークが初期から登録できるのものはユニークを活用しましょう。
    BSQL検索フォーム⇒外部DBテーブルを作成し、絞り込み条件1に#DSQL( &STR )や#DSQL( &SQL入力 )を書き込みます。イベントの名札で&STR=「ここにSQLのWHERE に各SQL文を書く」"例:&STR="記入年>="+#文字列(#年(#年月日))"
    &STRは初期定義なのでいいですが、&SQL入力はないので名札で自分で変数宣言しましょう。#DSQLを書いたテーブルは通常で開きません。一括処理で宣言+値を入れる簡単なものを作成し、桐を開いて実行してから外部DBを開きましょう。
    検索の際は&STRに違うWHERE文を記載した後、「再抽出  変数使用 = する」で内容が更新されます。(以下例 ANDは勝手に追加するようにしました。)
      条件(&q希望納期≠#未定義)&SQL文=&SQL文+&接続詞+"希望納期 LIKE '%"+&q希望納期+"%'"
      条件(&SQL文≠#未定義)  &接続詞=" AND "
      条件(&q納入日≠#未定義) &SQL文=&SQL文+&接続詞+"納入日 LIKE '%"+&q納入日+"%'"
    <感想>
    hidetakeさん尾形さんの多大な協力を頂いてなんとか形にできました。SQLを活用し、開く量を最小限にすることで60万レコードのテーブルでもすぐにひらく様に扱うことができます。上記のようなユニークで問題なければ主キー問題はあまり関係ありません。桐でも早いプログラムが作れるんだ!と感動しました。
引用返信 [メール受信/OFF] 削除キー/
■13314 / inTopicNo.2)  Re[1]: 桐+SQLServerExpress奮闘記
□投稿者/ ななーし -(2022/06/14(Tue) 15:51:14)
    検索フォームのところがきえてたので原文
    手続き定義開始 CMD検索()
      絞り込み解除 *
      変数宣言 自動,文字列{&SQL文=#未定義,&接続詞=#未定義}
      条件(&q希望納期≠#未定義)&SQL文=&SQL文+&接続詞+"希望納期 LIKE '%"+&q希望納期+"%'"
      条件(&SQL文≠#未定義)  &接続詞=" AND "
      条件(&q納入日≠#未定義) &SQL文=&SQL文+&接続詞+"納入日 LIKE '%"+&q納入日+"%'"
      &STR=#文字置換(#半角(&SQL文),”-”,”ー”)
      再抽出  変数使用 = する
    手続き定義終了

    #半角は全角とまじると検索で面倒なのでフォームで入力時に半角にするようにしてます。なので検索時も勝手に半角にしてます。ハイフンは2種類あるので片方に文字置換して検索がスムーズになるようにしてます。
引用返信 [メール受信/OFF] 削除キー/
■13316 / inTopicNo.3)  Re[2]: 桐+SQLServerExpress奮闘記
□投稿者/ 尾形 -(2022/06/14(Tue) 17:01:09)
    どうも、こんにちは


    意外に簡単ですよね
    外部DB使われる方が増えて
    桐が洗練されていくといいなぁ
    なんて思っています


    DBバックアップ&DBリストア
    も早い段階で試行される事おすすめします


    SQLダンプになるのかな

引用返信 [メール受信/OFF] 削除キー/
■13317 / inTopicNo.4)  Re[3]: 桐+SQLServerExpress奮闘記
□投稿者/ ななーし -(2022/06/15(Wed) 07:53:22)
    尾形さんこんにちは

    最初は、SSMSで主キーが設定してないと外部DB表が編集できなかったり等、主キーのいらない桐の柔軟さが失われて困りましたが、友人の発想でタイムスタンプを主キーにすることでただ、置き換えることができました。レコードロックで開けない!ってこともなくなりますし、開く量を調整すれば桐重たいなーってこともなくなります。桐を共有で使ってる方はぜひチャレンジしてみてほしいですね!非常に便利になりました。

    DBのバックアップは桐経由でやるかVBS?クエリ?経由でやるか悩み中です。一番簡単なのは桐でテーブル複製した方が速そう?(桐は旧Verが余ってるのでそれでコピーしちゃおうかなーと。)
引用返信 [メール受信/OFF] 削除キー/
■13318 / inTopicNo.5)  Re[4]: 桐+SQLServerExpress奮闘記
□投稿者/ hidetake -(2022/06/15(Wed) 09:59:54)
    ■SQL サーバのデータバックアップ方法
    
    0.SQL サーバが有料版であれば、SQLサーバ内
      のエージェントとスケジューラで取るのが
      普通だと思います。
    
    無償版の場合
    
    1.桐のデータとしてバックアップを取る方法
    
      桐の起動時、その日の最初の起動時にだけ
      桐のテーブルにバックアップを取ることは
      私も実行してます。
      日々、動かないデータで、どうしても必要
      な表引きなどは、このデータを使用して
      います。
    
    2.サーバのバックアップ機能を使用する方法
    
      バックアップスクリプトを作成し、タスク
      スケジューラで実行する。
      A. SQLサーバのサービスを停止する。
      B. WBADMIN.EXE で SQLデータ領域のバック
        アップを取る。
      C. SQLサーバのサービスを起動する。
    
      さらに高度なやり方としては、
      A. SQLサーバのサービスを停止する。
      B. vssadmin.exe で、SQLサーバデータ
        ドライブのボリュームシャドウコピーを
        取る。
      C. SQLサーバのサービスを起動する。
      D. サービスが再開したら、先に取った
        ボリュームシャドウ領域をドライブと
        して表に出し、SQL データのバック
        アップ取る。
      ※ SQLサーバの停止時間を短くしたい場合
        に有効です。
    
    3.SQLPS.exe を使用する方法。
      ※ Microsoft 非推薦。
        将来つけなくなるかも?という。
    
        SQLPS.exe -command Backup.ps1
    
       ・Backup.ps1
        -------------
        Invoke-Sqlcmd "BACKUP DATABASE DBNAME TO DISK = 'X:\path\DBNAME.bak' WITH FORMAT, NAME = 'DBNAME'" -ServerInstance "SERVER\" -QueryTimeout 300
        -------------
    
    4.PowerShell を使用する方法。
    
        powershell.exe -command Backup2.ps1
    
       ・Backup2.ps1
        -------------
        Backup-SqlDatabase -ServerInstance SERVER\ -Database DBNAME -Initialize -BackupAction Database
        Backup-SqlDatabase -ServerInstance SERVER\ -Database DBNAME -Initialize -BackupAction Log
        -------------
    
    用途・状況に応じて。
    

引用返信 [メール受信/OFF] 削除キー/
■13319 / inTopicNo.6)  Re[5]: 桐+SQLServerExpress奮闘記
□投稿者/ 尾形 -(2022/06/15(Wed) 15:39:12)
    どうも、こんにちは

    MS-SQLの挙動を知りたくて聞いてみました

    > エージェントとスケジューラで取るのが
    >   普通だと思います。

    やっぱりそんな感じなのですね
    これだと、桐側からバッチファイル経由とかで
    簡単にはできなさそうですね


    ありがとうございました


引用返信 [メール受信/OFF] 削除キー/
■13320 / inTopicNo.7)  Re[6]: 桐+SQLServerExpress奮闘記
□投稿者/ hidetake -(2022/06/15(Wed) 16:18:00)
    >>エージェントとスケジューラで取るのが
    >>  普通だと思います。
    
    通常、使われていない夜中に実行すると
    思います。
    
    それに、バックアップとともに圧縮も
    行ったり。
    
    外部からは、前に調べた限り、圧縮は
    自動ではできなかったような?
    
    Invoke-Sqlcmd "DBCC SHRINKDATABASE (DBNAME, 10);" -ServerInstance "SERVER\" -QueryTimeout 300

引用返信 [メール受信/OFF] 削除キー/
■13321 / inTopicNo.8)  Re[4]: 桐+SQLServerExpress奮闘記
□投稿者/ 尾形 -(2022/06/15(Wed) 18:58:17)
    > 桐は旧Verが余ってるのでそれでコピー

    文字コードが違うので
    化ける箇所がでるかと思います


引用返信 [メール受信/OFF] 削除キー/
■13322 / inTopicNo.9)  Re[4]: 桐+SQLServerExpress奮闘記
□投稿者/ 尾形 -(2022/06/15(Wed) 19:08:07)
引用返信 [メール受信/OFF] 削除キー/
■13323 / inTopicNo.10)  Re[5]: 桐+SQLServerExpress奮闘記
□投稿者/ hidetake -(2022/06/15(Wed) 22:53:49)
引用返信 [メール受信/OFF] 削除キー/
■13324 / inTopicNo.11)  Re[7]: 桐+SQLServerExpress奮闘記
□投稿者/ hidetake -(2022/06/16(Thu) 07:55:31)
    > Invoke-Sqlcmd "DBCC SHRINKDATABASE (DBNAME, 10);" -ServerInstance "SERVER\" -QueryTimeout 300

    SQL Server にも EXECUTE は、あるので、
    どうしてもやりたければ、桐側で特定の
    テーブルでトリガを発生させるとか、
    Windows のタスクスケジューラで、実行
    させるとか、やればできそうですね。

    https://docs.microsoft.com/ja-jp/sql/t-sql/language-elements/execute-transact-sql?view=sql-server-ver16

    それよりも前に、この内容は相当昔に
    試しただけなので、今は?実行できる
    のかも知れません。
引用返信 [メール受信/OFF] 削除キー/
■13325 / inTopicNo.12)  Re[8]: 桐+SQLServerExpress奮闘記
□投稿者/ ななーし -(2022/06/16(Thu) 11:27:49)
引用返信 [メール受信/OFF] 削除キー/
■13326 / inTopicNo.13)  Re[5]: 桐+SQLServerExpress奮闘記
□投稿者/ ななーし -(2022/06/16(Thu) 11:44:05)
    文字コードは一括の高度な設定でシフトJIS指定してるのでよっぽどいけるかなーと思いつつ上司相談した結果0.01%でもばぐると面倒だし買いなさいとなり、必要なら新規購入になりました。(笑)
    SQLインジェクションとSSMSでのスクリプトでの出力結果は同じようなものなので、テーブルの一部を治したいとき用のバックアップとして以下のような感じで書き出しましたが、結合を開くのに時間すこし時間かかるくらいで書き出し表は一瞬でした。
    まあ、CSV登録機能も付けたので消してからそっちから再度流し込んでもいいのでどうやるか検討します。エクセルで40万件開くと重たいですからね。

    ファイル削除
    結合 ●●.XVX
    書き出し表
引用返信 [メール受信/OFF] 削除キー/
■13447 / inTopicNo.14)  Re[1]: 桐+SQLServerExpress奮闘記
□投稿者/ ななーし -(2022/08/03(Wed) 17:04:15)
    【追記】
    ビューでもクラスター化インデックスをつければ結合表として編集が可能でした。
    Viewのデザイナでプロパティにある「スキーマにバインド」を「はい」にすると、ビューのコンテキストメニューから、「新しいインデックス->クラスター化インデックス」を行えます。
    テーブルで計算列を作るとODBCエラーになりますが、ビューで計算列を作るとエラーになりません。オススメです。
    https://social.technet.microsoft.com/Forums/ja-JP/376cd0f2-952a-4a08-a048-42decf06eb38/ssms123911245212531124871248312463124732018412499125171254012398?forum=sqlserverja

    ビューの計算列はデザインの画面の列欄に[単価]*[個数]と式をいれると計算列になります。隣に金額といれれば桐の外部DBでは金額と表示されます。
引用返信 [メール受信/OFF] 削除キー/
■13449 / inTopicNo.15)  Re[2]: 桐+SQLServerExpress奮闘記
□投稿者/ 尾形 -(2022/08/03(Wed) 17:11:41)
    どうも、こんにちは


    > テーブルで計算列を作るとODBCエラーになりますが
    xvxに計算式ですよね?
    数量*単価 程度なら作れると思いますけど
    どんな計算式ですか?



引用返信 [メール受信/OFF] 削除キー/
■13450 / inTopicNo.16)  Re[3]: 桐+SQLServerExpress奮闘記
□投稿者/ ななーし -(2022/08/03(Wed) 17:47:43)
    2022/08/03(Wed) 17:48:08 編集(投稿者)

    XVXで金額を計算する単価×個数をやろうとした際にやり方がわからず、SQL側で実施しました。
    もしかして外部DBテーブルのXVX側でも計算列ってつくれるんです?
引用返信 [メール受信/OFF] 削除キー/
■13452 / inTopicNo.17)  Re[4]: 桐+SQLServerExpress奮闘記
□投稿者/ 尾形 -(2022/08/03(Wed) 18:29:48)
    > 外部DBテーブルのXVX側でも計算列ってつくれるんです?

    作ってます
    関数によってはダメみたいですけど

    とりあえず、関数無しの
    足し算とかしてみては


引用返信 [メール受信/OFF] 削除キー/
■13453 / inTopicNo.18)  Re[5]: 桐+SQLServerExpress奮闘記
□投稿者/ ななーし -(2022/08/03(Wed) 19:49:58)
    2022/08/04(Thu) 08:53:51 編集(投稿者)
    2022/08/04(Thu) 08:53:40 編集(投稿者)

    XVXファイルのどこに計算式書くんです?
    名前のとこでしょうか?ここがわからず断念してました。
    ⇒新規行で所属対象表=計算項目を選択し、項目/計算式に計算式を記入すると計算されました。データ型はちゃんと選ばなきゃですね。SQL側で計算させた方が少しだけ(ほんの数秒)早いっぽいですが、通常運用(SQL絞り込みで読み込ませる量を絞る)なら体感できない程度っぽいです。

    計算式だけならこちらのが便利ですねー勉強になりました。(これで表でしかできなかったことはないのかもしれません。表状態での項目の初期値くらいでしょうか)

    ビューでINNNERJOINで結合してクラスター化インデックスを指定したらSQLの結合表でも編集は可能になります。新規行でいじろうとするとまた困難になりますが・・・ODBCめ
解決済み!
引用返信 [メール受信/OFF] 削除キー/
■13470 / inTopicNo.19)  Re[6]: 桐+SQLServerExpress奮闘記
□投稿者/ 尾形 -(2022/08/07(Sun) 07:44:38)
    > ODBCめ


    ODBCドライバも
    バージョンが違うと
    定義済のxvxが開けない時があるようで


    稼働数年後に、PC入替で
    最新のODBCドライバで設定しようとしたら
    xvx開けませんでした


    アーカイブが入手できない時もあるので
    稼働時のドライバ、SQLサーバ本体
    を確保しておくのがいいかもです


    参考までに

引用返信 [メール受信/OFF] 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

Mode/  Pass/

HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 ファイル一覧 検索 過去ログ

- Child Tree -
- Antispam Version -