【実務・中級編】【外部データ連携】ADODBを用いたSQL Serverからの製品仕様抽出と、それに基づく完全自動パーツ生成エンジン – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks自動化の真髄:SQL Server連携による「無人パーツ生成エンジン」の構築術

SolidWorks APIを使いこなしているつもりでも、多くのエンジニアが陥る罠がある。それは「マクロをボタン操作の代行ツール」としか捉えていないことだ。

真の自動化とは、CADを操作することではない。「外部のデータソースを、3D空間上の幾何学情報へと翻訳するパイプラインを構築すること」に他ならない。本稿では、生産管理システムやデータベース(SQL Server)の受注データをトリガーに、人間を介さずパーツを生成する「堅牢なエンジン」の設計思想を伝授する。

1. なぜ「その設計」では失敗するのか?

多くの現場で、以下のような実装が見受けられる。

  • ActiveDocumentへの過度な依存: `swApp.ActiveDoc`を多用し、画面のチラつきやフォーカス喪失で処理が止まる。
  • ハードコーディング: 寸法値をコード内に直書きし、製品仕様の変更のたびにソースコードを修正している。
  • エラー処理の欠如: データベースのコネクションエラーや、フィーチャの再構築失敗(Rebuild Error)を放置している。

これらは「ツール」であって「システム」ではない。プロダクション環境で求められるのは、「例外を握りつぶさない、自己修復的なアーキテクチャ」である。

2. 堅牢なデータ連携:ADODBの正しい作法

SQL Serverとの通信には、VBA標準の`ADODB`を用いる。ここで重要なのは、接続文字列の管理と、トランザクションの考え方だ。

‘ 必要な参照設定: Microsoft ActiveX Data Objects x.x Library
Public Function GetProductSpec(ByVal orderId As String) As Object
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim connStr As String

‘ セキュリティのため、接続情報は定数または外部設定ファイルから読み込むこと
connStr = “Provider=SQLOLEDB;Data Source=SERVER_NAME;Initial Catalog=DB_NAME;Integrated Security=SSPI;”

Set conn = New ADODB.Connection
conn.Open connStr

‘ SQLインジェクションを防ぐため、パラメータクエリを推奨
Set rs = conn.Execute(“SELECT Width, Height, Depth FROM ProductSpecs WHERE OrderID = ‘” & orderId & “‘”)

Set GetProductSpec = rs
‘ ここでconnを閉じるとRecordsetが使えなくなるので注意(切断型Recordsetにする)
rs.CursorLocation = adUseClient
Set rs.ActiveConnection = Nothing
conn.Close
End Function

3. 完全自動パーツ生成エンジンの実装

フィーチャ操作の鉄則は、「スケッチの完全拘束」「名前によるフィーチャ取得」である。フィーチャIDに依存してはならない。

Public Sub GeneratePartFromSpec(spec As Object)
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeat As SldWorks.Feature

Set swApp = Application.SldWorks
‘ テンプレートから新規作成
Set swModel = swApp.NewDocument(“C:\ProgramData\SolidWorks\templates\Part.prtdot”, 0, 0, 0)

‘ 1. スケッチ作成(簡略化のため押し出しのみ)
swModel.SketchManager.InsertSketch True
‘ … スケッチ処理 …

‘ 2. 寸法駆動(名前で取得する癖をつける)
Dim swDim As SldWorks.Dimension
Set swDim = swModel.Parameter(“D1@Sketch1”) ‘ スケッチ寸法名
swDim.SystemValue = spec.Fields(“Width”).Value / 1000 ‘ メートル単位への変換を忘れないこと

‘ 3. 再構築(Rebuildは必須)
swModel.EditRebuild3

‘ 4. 保存(パスは設計ルールに基づき動的生成)
swModel.SaveAs2 “C:\Exports\Order_” & spec.Fields(“ID”).Value & “.SLDPRT”, 0, False, False
End Sub

4. プロフェッショナルが守るべき3つの鉄則

① 単位系の徹底した管理

SolidWorks APIは基本的に「メートル法(SI単位系)」で動作する。データベース上の数値が「mm」であれば、必ず`1000`で割る処理を噛ませよ。これを関数化せずコードに散らばらせると、将来的に必ずバグの温床となる。

② フィーチャの再構築確認

`EditRebuild3`を実行した際、エラーが出ていないかを`swModel.GetErrors`で監視せよ。モデルが「壊れた状態(エラーマークが付いた状態)」で保存されることを防ぐのが、システムエンジニアの責任だ。

③ ユーザーインターフェースを殺せ

無人実行の場合、`swApp.Visible = False`(またはバックグラウンド処理)を検討せよ。画面描画を停止するだけで、生成速度は数倍に跳ね上がる。

結論:自動化は「設計」で決まる

あなたが書くべきは、単なるマクロではない。「データに基づき、自律的に形状を最適化するエンジン」だ。

データベースという「論理」を、SolidWorksという「物理」に落とし込む。この橋渡しこそが、業務自動化エンジニアの腕の見せ所である。まずは上記のパターンを基盤とし、エラーハンドリングを完璧に組み込んだ「止まらないシステム」を構築してほしい。

コードは嘘をつかない。設計の甘さがそのまま、現場の混乱に直結する。その重みを背負ってキーボードを叩く者だけが、真の自動化を成し遂げられるのだ。

タイトルとURLをコピーしました