เรามีแอปพลิเคชัน Delphi7 + UIB + Firebird 2.5 สำหรับร้านพิซซ่า ซึ่งทำงานได้เสถียรบนเครือข่ายแบบมีสาย
แต่เมื่อใช้ wifi (ทำงานร่วมกับแท็บเล็ตพีซี Win8/Win10) หากการเชื่อมต่อขาดหาย UIBDatabase ไม่สามารถเชื่อมต่อใหม่ได้โดยอัตโนมัติ
(ขณะนี้เรากำลังสร้างแอปทั้งหมดใหม่เพื่อลบ "IBX ที่เหลือ" แต่หลังจากอัปเกรด UIB เป็นเวอร์ชันล่าสุด ดูเหมือนว่าปัญหาจะยิ่งแย่ลงไปอีก!)
หลังจากการเชื่อมต่อขาดหาย ข้อความแสดงข้อผิดพลาด เป็น:
Project ...exe raised exception class EUIBError with message 'connection rejected by remote interface
Connection not established
GDS Code: 335544421 - SQL Code: -923 - Error Code: 101'. Process stopped.
แม้ว่าฉันพยายามปิดการเชื่อมต่อปัจจุบันด้วย .IsConnected:=False
หรือ .CancelAbort
ก็ไม่สามารถเชื่อมต่อใหม่ได้อีก:
Project ...exe raised exception class EUIBError with message 'invalid statement handle
Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements
GDS Code: 335544485 - SQL Code: -901 - Error Code: 165'. Process stopped. Use Step or Run to continue.
ดังนั้นไม่ว่าเราจะทำอะไร เราไม่สามารถเชื่อมต่อใหม่ได้!
กรณีที่เลวร้ายที่สุดคือเมื่อแท็บเล็ตพีซีเข้าสู่โหมดสลีป เนื่องจากการเชื่อมต่อขาดหายอย่างแน่นอน แต่ส่วนประกอบคิดว่ายังออนไลน์อยู่ ใช้เวลาอย่างน้อย 8 วินาทีในการรับรู้ว่าไม่สามารถดำเนินการแบบสอบถามได้
เราได้พยายามเริ่ม TTimer ก่อนเพื่อบังคับให้ยกเลิกการดำเนินการหลังจาก 2000 มิลลิวินาที แต่เหตุการณ์นั้นไม่เคยถูกไล่ออก
ฉันจึงสงสัยว่า:
- มีวิธีจัดการกรณีเหล่านี้อย่างเหมาะสมหรือไม่?
- ไม่มีใครมีปัญหาเช่นนี้? (สีแดง ทุกหัวข้อที่เกี่ยวข้องที่นี่ พบ เพียง 1 รายการที่คล้ายกัน พร้อมโซลูชัน 0 รายการ .)
- องค์ประกอบ UIB ปัจจุบันสามารถดาวน์โหลดได้จาก ที่นี่ ไม่ เสถียร? (มีช่วงเวลาที่ยากลำบากในการคอมไพล์ภายใต้ D7 เนื่องจากมีข้อผิดพลาดที่ไม่เข้ากันของ SynEdit มากมาย!)
- เหตุใดเหตุการณ์
.OnConnectionLoss
จึงเริ่มทำงาน หลังจาก ฉันพยายามเชื่อมต่อใหม่อีกครั้งเท่านั้น - เป็นไปได้หรือไม่ที่จะเชื่อมต่อกับ:
ธุรกรรม SAME อีกครั้ง,
เสร็จสิ้นการค้นหา
และยอมรับและปิดอย่างถูกต้อง?
(เนื่องจากเราสามารถอ่านธุรกรรมได้ ID จาก Firebird) ... ดังนั้นเซิร์ฟเวอร์จึงไม่จำเป็นต้องเปิดค้างไว้นานกว่า 2 ชั่วโมง