เรามีแอปพลิเคชั่น MS Access ขนาดใหญ่มากที่พัฒนาขึ้นภายในองค์กรเพื่อความต้องการส่วนบุคคลของเราซึ่งต่อมาได้กลายเป็นซอฟต์แวร์เชิงพาณิชย์และขายได้สำเร็จ ซอฟต์แวร์นี้เป็น "all-round-software-for-your-business" และมีหลายโมดูลรวมถึงระบบการจัดการเอกสารการวางแผนทรัพยากรองค์กรการจัดการสินค้าคงคลังการจัดการลูกค้าสัมพันธ์การวิเคราะห์ข้อมูลและอื่น ๆ เราค่อนข้างพอใจกับปัจจุบัน ฟังก์ชันการทำงานของแอปพลิเคชัน แต่เพื่อตอบสนองคำขอจากลูกค้าของเราเราตระหนักว่าเราต้องย้ายไปยังสิ่งใหม่
เราตัดสินใจที่จะค่อยๆย้ายแอปพลิเคชันของเราไปยัง. Net เพราะเราสามารถติดกับ Visual Basic .Net: แม้ว่ามันจะเป็นภาษาใหม่สำหรับนักพัฒนาส่วนใหญ่ที่นี่เรามีความรู้เชิงลึกเกี่ยวกับ VBA และโครงการขนาดเล็กจำนวนมาก
เราได้เริ่มย้ายฟังก์ชันการทำงานของชั้นข้อมูลของแอปพลิเคชันของเราไปยัง MS SQL Server เพื่อให้ทุกการจัดการข้อมูลและการค้นหาทำได้โดยตรงบนเซิร์ฟเวอร์
สิ่งที่เรากำลังมองหาคือแนวปฏิบัติที่ดีที่สุดสำหรับการค่อย ๆ เคลื่อน GUI ที่กว้างขวางของเรา (ประมาณ 500-600 รูปแบบที่แตกต่างกันรวมถึงฟอร์มย่อยรายงานประมาณ 200 ฉบับพร้อมการสนับสนุนหลายภาษาเป็นต้น) การติดตามคำขอล่าสุดจากลูกค้าที่มีศักยภาพของเราในการใช้การเข้ารหัสข้อมูลแบบอะซิงโครนัสบนเอกสารใน DMS เรายินดีที่จะแยกส่วนนี้ออกจาก MS Access อย่างสมบูรณ์และนำไปใช้ใน. Net
คำถามคือทำอย่างไรจึงจะรวมแอปพลิเคชั่น. Net เข้ากับระบบ MS Access ที่มีอยู่ได้อย่างราบรื่นเพื่อให้เราสามารถเรียกใช้พารามิเตอร์บางตัว (สิทธิ์ผู้ใช้เป็นต้น) และเปิดใช้งานการแลกเปลี่ยนข้อมูลระหว่างแอปพลิเคชันนี้
แก้ไข:
เราพยายามใช้แนวทางปฏิบัติบางอย่างจากหนังสือของมาร์ตินฟาวเลอร์ " รูปแบบการรวมกันขององค์กร " เพื่อให้เกิดการบูรณาการระหว่างแอปพลิเคชัน MS Access และยูทิลิตี้ขนาดเล็กบางอย่างที่เรานำมาใช้ใน. Net แต่เราจัดการเพื่อใช้รูปแบบ "ฐานข้อมูลที่ใช้ร่วมกัน" เท่านั้นและไม่พอใจกับโซลูชันของเราจริงๆ
ตัวอย่างเช่นเราใช้ยูทิลิตี้ขนาดเล็กที่ทำงานเป็นบริการของ Windows ซึ่งจะดาวน์โหลดข้อความทั้งหมดจากเมลเซิร์ฟเวอร์โดยอัตโนมัติโดยใช้การเชื่อมต่อ POP3 และเก็บไว้ในตารางเดียวในขณะที่สิ่งที่แนบมาทั้งหมดจะถูกเก็บไว้ในระบบไฟล์
สิ่งที่เราทำส่วนใหญ่คือเราใช้ ADO.NET เพื่อเข้าถึงฐานข้อมูล MS Access โดยตรงในรูปแบบ MDB และเติมตารางด้วยข้อมูลที่ประมวลผลบางส่วน (เช่นข้อมูลเกี่ยวกับข้อความอีเมลจากตัวอย่างข้างต้น: เรามีฟิลด์สำหรับ FROM, TO, CC, BCC, หัวเรื่องและร่างกาย)
ไม่มีปัญหาในการทำงานกับรูปแบบข้อมูล MDB จาก. Netยิ่งไปกว่านั้นเราไม่ต้องการอยู่กับ MDB และเพิ่มพูนเกือบทุกอย่างให้กับ MS SQL Server 2008 - สิ่งนี้ทำให้เรามีอิสระมากขึ้นเกี่ยวกับการจัดการข้อมูลและความยืดหยุ่น
ปัญหาหลักที่นี่คือเราไม่รู้วิธีการใช้ "การติดต่อกลับ"ใน Access เพื่อให้เราสามารถเรียกใช้งานโค้ด VBA บางตัวในการอัพเดทข้อมูล
เรามีความหวังอย่างยิ่งกับ MS Access 2010 ที่รองรับการอัปเดตและแทรกทริกเกอร์สำหรับตารางข้อมูลแต่ปรากฎว่าเราสามารถใช้ MS Access Macros สำหรับทริกเกอร์เหล่านี้ได้เท่านั้นและไม่มีวิธีเรียกใช้โค้ด VBA ที่กำหนดเองภายในไก
นอกจากนี้เรายังลองวิธีการแก้ปัญหาด้วยการส่งการกดแป้นพิมพ์โดยตรงไปที่หน้าต่าง MS Accessเพื่อเลียนแบบแบบสอบถามข้อมูลที่ผู้ใช้เรียกใช้ ใช้งานได้ แต่เราไม่คิดว่านี่เป็นโซลูชันที่ใช้งานได้จริงซึ่งสามารถนำมาใช้ในการผลิตได้
นอกจากนี้เรายังค้นหา DDE สำหรับ MS Access ด้วย แต่เราไม่พบโซลูชันตัวอย่างที่ดีใด ๆ ที่ใช้คำสั่ง DDEและใช้พวกมันสำหรับข้อมูลในหน่วยความจำและการแลกเปลี่ยนคำสั่ง
ดังนั้นปัญหาหลักคือการมี MS Access และ. Net application อยู่ร่วมกันและโต้ตอบกัน
แก้ไข 2 :
ฉันลืมที่จะพูดถึงสิ่งที่เรายังใช้ไลบรารี MSMQ ใน VBAสำหรับการส่งข้อความระหว่าง. Net และ MS Access ปัญหาคือการขาดการติดต่อกลับที่นี่: เราต้องสำรวจคิวสำหรับข้อความใหม่และ VBA ไม่สนับสนุนจริงๆ หลายเธรดมันไม่ได้เป็นทางออกที่ดีจริงๆ