【入門編】【上級プロ】外部データベース(SQL Server)と連携したアセンブリ自動生成システムのアーキテクチャ設計 – SolidWorks VBA解析バイブル

スポンサーリンク

こんにちは!SolidWorks VBAの世界へようこそ。
マクロの記録ボタンを押して、ちまちま図形を動かすだけの自動化はもう卒業しましょう。今回は、現場のエンジニアなら誰もが夢見る「外部データベース(SQL Server)と連携したアセンブリ自動生成システム」のアーキテクチャ設計について、魂を込めて解説します。

「DBのスペックを変更するだけで、SolidWorksが勝手に部品をかき集め、一糸乱れぬ合致(Mate)でアセンブリを組み上げる――」
そんなロマンあふれるシステムを、あなたの手で現実のものにするための極意を伝授します。ここをクリアすれば、あなたの設計業務の効率は文字通り「次元が変わる」はずです。一緒に一歩ずつ進んでいきましょう!

—

1. なぜ「DB連携型アセンブリ自動生成」なのか?

「毎日似たような構造だけど、寸法や型番が違うアセンブリを何十個も作らされている……」
そんな絶望感を味わったことはありませんか?従来のコンフィギュレーション制御やデザインテーブルには、扱えるバリエーションの限界や、ファイル肥大化によるパフォーマンス低下という致命的な弱点があります。

そこで登場するのが、「外部DB(SQL Server)駆動型アーキテクチャ」です。

  • データベース(SQL Server): 製品の仕様、構成部品(Child)のリスト、締結関係、寸法パラメータを一元管理。
  • SolidWorks VBA(司令塔): DBからデータを取得し、ゼロからアセンブリ(Parent)を新規作成し、部品を配置して合致をプログラムで完結させる。

この分離構造により、何万通りものバリエーションを軽快に、かつ破綻なく自動生成できるようになります。

—

2. 全体アーキテクチャの設計図

まずは、このシステムがどのような流れで動くのか、頭の中に全体像を描きましょう。

[ SQL Server (製品スペック・構成DB) ]
│
│ (ADO経由でクエリ発行)
▼
[ SolidWorks VBA (司令塔) ]
├── 1.新規アセンブリドキュメントの作成
├── 2.DBから取得したパスをもとに部品を動的挿入 (AddComponents)
├── 3.カスタムプロパティの自動書き込み (CustomPropertyManager)
└── 4.幾何学的な位置関係を数理的に計算して合致を定義 (AddMate5)

このフローをVBAで実装していきます。「マクロの記録」では絶対に吐き出されない、APIの真骨頂を味わう準備はいいですか?

—

3. 実装のステップ:極限のVBAコード解説

ここからは、実務でそのまま使えるレベルの洗練されたコードをベースに、重要なポイントを噛み砕いて解説します。

ステップ①:SQL Serverへの接続とデータ取得

まずはVBAからSQL Serverにアクセスし、どの部品をどの位置に組み付けるべきかの「設計指示書(レコードセット)」を取得します。

‘ 必要な参照設定: Microsoft ActiveX Data Objects (ADO)
Public Sub GenerateAssemblyFromDB()
Dim conn As Object
Dim rs As Object
Dim connString As String

‘ 1. SQL Serverへの接続文字列(環境に合わせて変更してください)
connString = “Provider=SQLOLEDB;Server=YOUR_SERVER_NAME;Database=YOUR_DB_NAME;Uid=YOUR_USER;Pwd=YOUR_PASSWORD;”

Set conn = CreateObject(“ADODB.Connection”)
conn.Open connString

‘ 2. アセンブリ構成データを取得するクエリ
Dim sql As String
sql = “SELECT PartPath, X_Coord, Y_Coord, Z_Coord FROM AssemblyStructure WHERE ModelID = ‘M001′”

Set rs = conn.Execute(sql)

If rs.EOF Then
MsgBox “対象のデータが見つかりませんでした。”, vbCritical
Exit Sub
End If

‘ 3. SolidWorksのセッションを呼び出し、アセンブリ構築へ
Call BuildAssembly(rs)

‘ 4. クリーンアップ
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing

MsgBox “アセンブリの自動生成が完了しました!”, vbInformation
End Sub

> 💡 先輩エンジニアからの知見:
> DB接続には必ずエラーハンドリングを入れましょう。ネットワークの瞬断や認証エラーでVBAが沈黙するのを防ぐため、`On Error` 構文の併用はプロの必須テクニックです。

—

ステップ②:動的なアセンブリの新規作成と部品配置

次に、SolidWorksを操作して新しいアセンブリファイル(`.sldasm`)を作り、DBから取得した座標に部品を配置します。

Sub BuildAssembly(rsData As Object)
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAssm As SldWorks.AssemblyDoc
Dim swComp As SldWorks.Component2

Set swApp = Application.SldWorks

‘ 空の新アセンブリドキュメントを作成(テンプレートパスは環境依存)
Set swModel = swApp.NewDocument(“C:\ProgramData\SolidWorks\SolidWorks 2023\templates\Assembly.asmdt”, 0, 0, 0)
Set swAssm = swModel

Do While Not rsData.EOF
Dim partPath As String
Dim x As Double, y As Double, z As Double

partPath = rsData(“PartPath”).Value
x = rsData(“X_Coord”).Value / 1000# ‘ mmからmへの変換(SolidWorks APIはメートル基準!)
y = rsData(“Y_Coord”).Value / 1000#
z = rsData(“Z_Coord”).Value / 1000#

‘ 部品をアセンブリに挿入
Set swComp = swAssm.AddComponent5(partPath, 0, “”, False, “”, x, y, z)

If swComp Is Nothing Then
MsgBox “部品の挿入に失敗しました: ” & partPath, vbExclamation
End If

rsData.MoveNext
Loop

‘ ビューの再構築(これを忘れるとグラフィックがバグります)
swModel.ForceRebuild3 True
End Sub

> ⚠️ ここでハマる!陥りやすいエラーと対策:
> SolidWorks APIの座標系は「メートル(m)」が基準です。DBに「100mm」と入っているからといって `100` をそのまま渡すと、部品が遥か彼方の宇宙空間に配置されてしまいます。必ず `1000#` で割ってメートル単位に換算するのを忘れないでください!

—

ステップ③:合致(Mate)の自動定義とカスタムプロパティ

部品をただ並べただけでは「アセンブリ」とは言えません。正しい拘束(合致)を与えて初めて生きたモデルになります。

‘ 例:面と面を一致(Coincident)させる合致のロジック(概念コード)
Dim swMateData As SldWorks.Mate2
‘ ※実際には SelectByID2 でエンティティを選択し、AddMate5メソッドを呼び出します

さらに、DBから取得した製品名や設計者名を、SolidWorksのカスタムプロパティに自動書き込みます。

Sub SetCustomProperty(swModel As SldWorks.ModelDoc2, propName As String, propValue As String)
Dim swCustPropExt As SldWorks.CustomPropertyManager
Set swCustPropExt = swModel.Extension.CustomPropertyManager(“”)

‘ プロパティを追加または更新
swCustPropExt.Add3 propName, swCustomInfoText, propValue, swCustomPropertyReplaceValue
End Sub

これにより、自動生成された3Dモデルから、そのまま正確な図面や部品表(BOM)をノータイムで吐き出すことが可能になります。

—

四苦八苦しながらコードを書き、一瞬で複雑なアセンブリが画面上に組み上がったときの感動は、言葉では言い表せないほど素晴らしいものです。
「マクロの記録」の先にあるこの領域をマスターすれば、あなたはもうただのCADオペレーターではありません。「製造業のデジタル化を牽引する自動化エンジニア」です。

ここをクリアすれば、SolidWorks VBAの基本はバッチリですよ!ぜひご自身の環境でもチャレンジしてみてください。それでは、次のステージでお会いしましょう!

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