PDA

View Full Version : Update کردن پایگاه داده از روی اینترنت



tazekar
یک شنبه 19 مرداد 1382, 11:08 صبح
سلام
من میخوام با استفاده از یه بانک SQL Server از یه سایت طراحی شده با ASP.net بانکSQL یه برنامه نوشته شده با Delphi7 رو هر چند وقت یکبار Update کنم . از دوستانی که در این زمینه اطلاعاتی دارند خواهش میکنم من رو راهنمایی کنند .

مهدی کرامتی
یک شنبه 19 مرداد 1382, 11:30 صبح
1- برای انجام چنین کاری نیاز به SQL Server نیست.
2- آیا Update قرار است اتوماتیک باشد یا با دخالت کاربر؟

در صورت امکان بیشتر توضیح دهید.

tazekar
یک شنبه 19 مرداد 1382, 13:11 عصر
سلام
بهتره با دخالت کاربر باشه . مثلا بتونه به برنامه بگه اطلاعات رو هر هفته Update کنه .
در ضمن بدون SQL چطور میشه اینار رو انجام داد ؟
اگه جواب بدی ممنون میشم .

MehdiRah
سه شنبه 20 آبان 1382, 15:59 عصر
این مشکلو منم دارم

jirjirakk
سه شنبه 20 آبان 1382, 16:25 عصر
فکر کنم XML بهترین انتخاب برای این جور برنامه ها باشه

tazekar
پنج شنبه 22 آبان 1382, 20:43 عصر
سلام
میشه بیشتر توضیح بدید؟
سایت و یا مقاله ای هم اگه سراغ دارید لطف کنید و بهم معرفی کنید .
مرسی

Mashatan
پنج شنبه 22 آبان 1382, 21:09 عصر
راستش قبلا مطرح شده بود و یک Component هم معرفی کردم
http://www.barnamenevis.org/forum/viewtopic.php?t=2902&highlight=update
ولی حالا یک توضیح کاملتری میدم !

از نطر تئوری خیلی ساده هست کافیه یک فایل که حاوی اطلاعات خام هستند مثل فرمتهای Inf و یا همین XML که دوستمون گفتند داشته باشی . این فایل باید حاوی تاریخ Update و همچنین آدرس Download برنامه جدید باشد ! و وقتی برنامه این فایل رو دریافت میکند و تاریخ Update فایل را با آخرین باری که دریافت کرده چک میکند اگر تغییر کرده باشه از آدرس Download میکند و تاریخ Update را در Registeryی (و یا هر جای دیگه ) ذخیره میکند برای دفعه بعد !

و اینکه چطوری بعد از دریافت ، خودش رو Update کنه الگوریتم خودش رو داره که خیلی ساده هست !

و شما وقتی Version جدید رو Release میکنید کافیه تاریخ Update رو تاریخ روز کنید و آدرس Download جدید رو در فایل قرار بدید و از طریق FTP به سرور Upload کنید.

ارادتمند
مشاطان

مهدی کرامتی
پنج شنبه 22 آبان 1382, 21:50 عصر
راستش من پارسال چنین کاری رو با استفاده از یک فایل INI انجام دادم. بدین ترتیب که حدود 10 تا برنامه آموزشی داشتیم که بعضی بخشهاشون (مثل بانک تستها، ...) از روی سایت مربوطه Update میشد.
در بخشهای مختلف فایل INI نام برنامه مورد نظر، آخرین Update آن برنامه، و مسیر آخرین فایل Update بر روی سایت رو قرار میدادم. مثلا چنین چیزی:


[CD027]
Update=1382/2/5
FilePath=[DownloadsPath]/CD027/027-13820505.zip

[CD054]
Update=1382/7/25
FilePath=[DownloadsPath]/CD054/054-13820725.zip
توی برنامه‌ام با چنین کدی چک میکردم که آیا فایل INI و Update مربوطه در محل صحیح قرار دارند یا نه:

If CheckURL('http://www.example.com/private/updates.ini') then
// do needed actions
If CheckURL('http://www.example.com/private/files/054/054-13820725.zip') then
// download and unzip update file in target directory
برای دسترسی به این فایل Update بر روی سایت نیز از Clever Internet Suite استفاده کردم.

در ضمن کل پروژه هم تو دلفی و با استفاده از WebBroker و ISAPI انجام دادم.

یک یونیت کوچولو هم که 2 تا تابع برای چک کردن وضعیت دسترسی به اینترنت توش هست هم نوشته‌ام که سورس‌اش را اینجا برای شما میگذارم.


unit InetTools;
interface

uses
WinInet,
SysUtils,
Windows;

Function CheckUrl(url:string):Boolean;
Function InternetConnected: Boolean;

implementation

{==========================================}
{ Check a URL with a file or without a file}
Function CheckUrl(url:string):boolean;
var
hSession, hfile, hRequest: hInternet;
dwindex,dwcodelen :dword;
dwcode:array[1..20] of char;
res : pchar;
begin
if pos('http://',lowercase(url))=0 then
url := 'http://'+url;
Result := false;
hSession := InternetOpen('InetURL:/1.0',
INTERNET_OPEN_TYPE_PRECONFIG,nil, nil, 0);
if assigned(hsession) then
begin
hfile := InternetOpenUrl(
hsession,
pchar(url),
nil,
0,
INTERNET_FLAG_RELOAD,
0);
dwIndex := 0;
dwCodeLen := 10;
HttpQueryInfo(hfile, HTTP_QUERY_STATUS_CODE,
@dwcode, dwcodeLen, dwIndex);
res := pchar(@dwcode);
result:= (res ='200') or (res ='302');
if assigned(hfile) then
InternetCloseHandle(hfile);
InternetCloseHandle(hsession);
end;

end;
{==========================================}
function InternetConnected: Boolean;
var
flags: dword;
R:Boolean;
begin
R := InternetGetConnectedState(@flags, 0);
if Result then
if (flags and INTERNET_CONNECTION_MODEM) = INTERNET_CONNECTION_MODEM then
Result:=True
Else Result:=False;
END;
{==========================================}

end.

tazekar
جمعه 23 آبان 1382, 13:06 عصر
ممنون از شما DelphiAssistant و Mashatan عزیز
ببینم من هم میتونم اینکار رو انجام بدم یا نه ؟ :lol: