PDA

View Full Version : سوال: تشخیص اضافه شدن رکورد به یک جدول



masoode
شنبه 18 خرداد 1398, 15:35 عصر
سلام
من می خواهم در دلفی تشخیص بدهم چه زمانی در دیتابیس رکوردی اضافه می شود.
یک برنامه ای که از قبل وجود دارد که پس از خواندن بارکد توسط بارکدخوان یک رکورد به یک جدول مشخص اضافه می شود. من می خواهم در برنامه خودم هر وقت دیتا اضافه شد آن را تشخیص بدهم و متناسب با آن کارم را انجام دهم.
یک روش که به نظرم اصلا مناسب نیست این است که با یک تایمر هر 1 ثانیه یک بار (یا بیشتر) آخرین بارکد را از جدول بخوانم، هر وقت بارکد جدیدی اضافه شد کارم را انجام بدهم
آیا راه بهتری برای این کار هست؟

یوسف زالی
شنبه 18 خرداد 1398, 19:41 عصر
سلام. بله راه بهتری هست، باید یک فایل دی ال ال بنویسید که با تریگر جدول مرتبط، فراخوانی بشه و این دی ال ال به برنامه شما پیامی رو ارسال کنه.
روش های دیگه هم هست ولی به نظر من این بهتره.

masoode
یک شنبه 19 خرداد 1398, 08:40 صبح
سلام. بله راه بهتری هست، باید یک فایل دی ال ال بنویسید که با تریگر جدول مرتبط، فراخوانی بشه و این دی ال ال به برنامه شما پیامی رو ارسال کنه.
روش های دیگه هم هست ولی به نظر من این بهتره.

این DLL مستقیما با SQL در ارتباط میشه؟
این روشی که گفتید برای من کاملا نامانوس است!!!! اگر می شه بیشتر توضیح بدهید یا سرِ خط را بدهید دستم. اگر منبع خوبی سراغ دارید معرفی کنید

یوسف زالی
یک شنبه 19 خرداد 1398, 14:18 عصر
این دی ال ال در اس کیو ال رجیستر می شه و اس کیو ال می تونه اون رو کال کنه!
اسمش هم هست:
Extended Stored Procedure
همین رو در دلفی و اس کیو ال سرچ کنید تا مقدمات کار بیاد دستتون.

masoode
دوشنبه 20 خرداد 1398, 09:02 صبح
ممنون از پاسخ تون
من یک dll با دلفی ساختم که یک فانکشن ساده برای تست توی اون نوشته ام که دو تا عدد میگیرد و با هم جمع میکنم اما موقعی که در قسمت Asseblies اضافه میکنم این پیام را میدهد:
TITLE: Microsoft SQL Server Management Studio
------------------------------

Create failed for SqlAssembly 'DemoDll'. (Microsoft.SqlServer.Smo)

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=13.0.15500.91+((SSMS_Rel).160701-0137)&EvtSrc=Microsoft.SqlServer.Management.Smo.Exceptio nTemplates.FailedOperationExceptionText&EvtID=Create+SqlAssembly&LinkId=20476

------------------------------
ADDITIONAL INFORMATION:

An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)

------------------------------

CREATE ASSEMBLY for assembly 'DemoDll' failed because assembly 'DemoDll' is malformed or not a pure .NET assembly.
Unverifiable PE Header/native stub. (Microsoft SQL Server, Error: 6544)

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=12.00.2000&EvtSrc=MSSQLServer&EvtID=6544&LinkId=20476

------------------------------
BUTTONS:

OK
------------------------------


ظاهرا فقط dll هایی که با .Net نوشته شده باشه را قبول می کنه

masoode
دوشنبه 20 خرداد 1398, 09:38 صبح
من فکر می کردم dll باید در قسمت Asseblies اضافه شود اما با بررسی های بیشتر فهمیدم که با دستور زیر باید در دیتابیس master در قسمت Extended Stored Procedure اضافه شود:
use [master]
go
sp_addextendedproc 'add','D:\Delphi\SmartFactory\DLL\Win32\Release\De moDll.dll'
با این دستور اضافه شد.
ظاهرا باید با این دستور آن را اجرا کرد اما نمی دانم پارامترهای ورودی و خروجی را چگونه مقدار دهی کنم:
exec master..[add] 21,3

اما این خطا را میدهد:
Msg 17750, Level 16, State 0, Procedure add, Line 1 [Batch Start Line 0]
Could not load the DLL D:\Delphi\SmartFactory\DLL\Win32\Release\DemoDll.d ll, or one of the DLLs it references. Reason: 193(%1 is not a valid Win32 application.).
البته 64 بیتی اش را هم تست کردم فرقی نکرد

یوسف زالی
دوشنبه 20 خرداد 1398, 13:48 عصر
شما که نمی تونی همین طوری هر دی ال الی رو رجیستر کنی تو اس کیو ال، قوانین خاص خودش رو داره، همون طور که می بینید داره می گه malformed هست.
قوانین مرتبط با XProcedure رو باید بخونید.
یا این که یک نمونه از نت بگیرید تا دستتون بیاد.

masoode
دوشنبه 20 خرداد 1398, 14:07 عصر
آیا XProcedure جزیی از خود دلفی است؟
می شه خودتون یک مثال بزنید یا یک لینک بهم بدهید دو سه روز است هر چه می گردم چیزی به دست نمی آورم
یک بنده خدایی می گفت با دلفی نمی شه باید فقط با دات نت این کار را کرد

یوسف زالی
سه شنبه 21 خرداد 1398, 01:03 صبح
اون بنده خدا صد در صد سی شارپ کار بوده که گفته نمی شه
می گردم پیدا می کنم، قبلا یکی نوشته بودم

masoode
سه شنبه 21 خرداد 1398, 09:36 صبح
اون بنده خدا صد در صد سی شارپ کار بوده که گفته نمی شه
می گردم پیدا می کنم، قبلا یکی نوشته بودم

همین طوره که حدس زدید
ممنون می شم اگر بتونید چیزی برام پیدا کنید

یوسف زالی
سه شنبه 21 خرداد 1398, 17:03 عصر
یک نمونه براتون آماده کردم، بخونید و از روی همین می تونید تمام کارهاتون رو جلو ببرید.
بیشتر از این دیگه اسمش راهنمایی نیست و پروژتون رو باید من بنویسم!
موفق باشید دوست گرامی

masoode
چهارشنبه 22 خرداد 1398, 10:39 صبح
ممنونم از لطف تون
خیلی راهنمایی مفیدی بود.
:قلب::قلب::قلب:

تست می کنم ببینم می تونم کارم را راه بندازم یا نه

masoode
شنبه 25 خرداد 1398, 09:21 صبح
Dll که شما فرستاده بودید را با همان دستوری که در فایل HowTo.txt نوشته بودید را در SQL Server نصب کردم. اما موقع اجرا کردن خطا می دهد که عکس آن را می فرستم
150359

masoode
سه شنبه 28 خرداد 1398, 09:05 صبح
استاد زالی عزیز
dll ی که فرستادید کار نکرد
الآن دارم می رم جلسه ای در مورد همین موضوع. امیدوارم بتونم برای یک روش جایگزین توافق کنم (با تیم برنامه نویسان کارفرما) اگر نشد باید یک جوری همین روش شما را به نتیجه برسانم