View Full Version : سوال: كپي ركوردهاي يك كوئري يا جدول در يك بانك ديگر بصورت درجا(اكسس)
mehdimdp
جمعه 25 اردیبهشت 1388, 18:16 عصر
سلام
من يه كوئري دارم كه آخرين موجودي رو به من ميده
حالا مي خوام تمام ركوردهاي اونو در يك فايل ديگه مثلا در جدول old ذخيره كنم .
بافرض اينكه جدول old در بانك دوم وجود ندارد.
اگه ميشه نحوه ي كپي كردن تمام اطلاعات يك جدول رو ازيك فايل به فايل داراي پسورد رو بفرماييد.
babak_delphi
جمعه 25 اردیبهشت 1388, 21:23 عصر
SELECT * FROM table1 WHERE Conditions INTO table2
shervin farzin
شنبه 26 اردیبهشت 1388, 00:29 صبح
سلام
SELECT * FROM table1 WHERE Conditions INTO table2
كدي كه دوست گرامي Babak_Delphi نوشتند براي مواقعي هست كه دو شرط برقرار باشه .
1 - Table به نام table2 از قبل وجود نداشته باشه .
2 - هر دو جدول table1 و table2 در يك فايل پايگاه داده باشند .
بعلاوه ، يك اشكال كوچيك هم داره كه جاي INTO table2 قبل از FROM هست .
به هر ترتيب ، از اونجا كه شما جداولتون در دو پايگاه داده جدا ( دو فايل جدا ) هست ، كد ايشون
مشكلي رو حل نخواهد كرد .
چون نفرموديد جدول old از قبل وجود داره يا نه من كد هر دو حالت رو مينويسم .
فرض كنيد دو فايل Access با نامهاي Database1 و Database2 در ريشه درايو C داريد و فرض كنيم
كه جدول new_Table داريد كه دو فيلد field_1 و field_2 داره و شما مايليد اين فيلدها رو به فيلدهاي
هم عرضشون با همين نامها در جدول old_Table منتقل كنيد .
اگر old_Table از پيش وجود نداشته باشد :
with ADOQuery1 do
begin
sql.Clear;
sql.Add('select * into old_Table in '+QuotedStr('C:\DataBase2.mdb'));
sql.Add('from new_Table');
ExecSQL;
end;
اگر جدول old_Table از قبل وجود دارد ( مهم نيست كه جدول old_Table مقدار داشته باشه يا نه
فقط توجه كنيد كه فيلدهاي field_1 و field_2 در جدول مقصد از نوع AutoNumber نباشه ) :
with ADOQuery1 do
begin
sql.Clear;
sql.Add('insert into old_Table (field_1,field_2) in '+QuotedStr('C:\DataBase2.mdb'));
sql.Add('select field_1,field_2 from new_Table');
ExecSQL;
end;
توجه كنيد كه ADOQuery1 به فايل DataBase1 وصل هست .
موفق باشيد .
mehdimdp
شنبه 26 اردیبهشت 1388, 10:08 صبح
سلام
فرض كنيد دو فايل Access با نامهاي Database1 و Database2 در ريشه درايو C داريد و فرض كنيم
كه جدول new_Table داريد كه دو فيلد field_1 و field_2 داره و شما مايليد اين فيلدها رو به فيلدهاي هم عرضشون با همين نامها در جدول old_Table منتقل كنيد .
.... .
حالا اگه database2 پسورد داشته باشه بايد چه كدي بنويسيم ؟
mehdimdp
شنبه 26 اردیبهشت 1388, 11:32 صبح
متاسفانه من نتونستم از دستور IN براي فايلهاي پسورد دار استفاده كنم.
لطفا منو راهنمايي كنيد.
merced
شنبه 26 اردیبهشت 1388, 22:55 عصر
حالا اگه database2 پسورد داشته باشه بايد چه كدي بنويسيم ؟
كافي بود تو اكسس تست مي كردي :
INSERT INTO (;PWD=yourpassword) NewTable ( F1, F2 ) IN 'C:\Database.mdb'[;PWD=yourpassword]
SELECT OldTable.F1, OldTable.F2
FROM OldTable;
mehdimdp
یک شنبه 27 اردیبهشت 1388, 00:18 صبح
سلام
از اينكه به من جواب ميدين متشكرم.
من كد شما رو با يه كم دستكاري نوشتم ولي بازم ارور ميده . اگه اينجوري بنويسم ميگه not a valid password
SELECT nakh.name, Sum(nakh.Vazn) AS [Sum Of Vazn], noe_nakh.name AS lname
into newtbl in 'c:\data2.mdb' [;PWD=1021]
FROM noe_nakh INNER JOIN nakh ON noe_nakh.nakh_cod=nakh.name
GROUP BY nakh.name, noe_nakh.name;
و اگه به صورت زير بنويسم ميگه could not find installable ISAM
SELECT nakh.name, Sum(nakh.Vazn) AS [Sum Of Vazn], noe_nakh.name AS lname
into newtbl in 'c:\data2.mdb' 'PWD=1021;'
FROM noe_nakh INNER JOIN nakh ON noe_nakh.nakh_cod=nakh.name
GROUP BY nakh.name, noe_nakh.name;
mehdimdp
یک شنبه 27 اردیبهشت 1388, 19:08 عصر
من همچنان منتظر پاسخ شما هستم.
merced
یک شنبه 27 اردیبهشت 1388, 21:15 عصر
شما اول دستور Insert into رو بنويس بعد Select رو
mehdimdp
یک شنبه 27 اردیبهشت 1388, 23:42 عصر
شما اول دستور Insert into رو بنويس بعد Select رو
بازم همون ارور:
NOT VALID PASSWORD
INSERT INTO OLDYEAR IN "F:\Mehdi's programs\Delphi\+Enayatproj\+Enayatproj\DATA88.MDB" [;PWD=123456] SELECT COD, Ntolid AS otolid, Nsalon AS osalon, Nahar AS oahar, Nanabr AS oanbar, mande AS omande, NNsabt AS onsabt
FROM mojoodi;
shervin farzin
دوشنبه 28 اردیبهشت 1388, 19:10 عصر
سلام
با تشكر فراوان از دوست عزيز Merced و عذرخواهي به خاطر تاخير در پاسخ .
استفاده از دستور IN در كد SQL يك روش براي آدرس دهي فايل Database هست . روش ديگه اي
هم وجود داره كه در مورد سوال شما ، بايد از اون استفاده كنيد . به كد زير نگاه كنيد :
select * from [;Database=c::\my_database.mdb;pwd=123].test
اين كد عمل Select رو روي جدولي از پايگاه داده my_database انجام ميده كه اين پايگاه با پسورد
به شماره 123 محافظت ميشه . اگر خوب به كد دقت كنيد خواهيد ديد كه در آدرس فايل به جاي
نوشتن \:C نوشتم \::C . خوب اين غلط املايي نيست ! اگر فقط يك بار از علامت : استفاده كنيد
دلفي فكر ميكنه كه شما در كد SQL از پارامتر استفاده ميكنيد و از شما انتظار Value داره ، اما با
نوشتن :: به جاي : شما به دلفي گفتيد كه هيچ پارامتري در كار نيست .
اگر به مثال خودم در پست 3 برگرديم ، نتيجه تغيير يافته اون كد ها به شكل زير خواهد بود .
اگر old_Table از قبل وجود نداشته باشه :
with ADOQuery1 do
begin
sql.Clear;
sql.Add('select * into [;Database=C::\Database2.mdb;pwd=your_password].old_Table');
sql.Add('from new_Table');
ExecSQL;
end;
اگر old_Table از قبل وجود داره :
with ADOQuery1 do
begin
sql.Clear;
sql.Add('insert into [;Database=C::\Database2.mdb;pwd=your_password].old_Table (f_name,l_name)');
sql.Add('select f_name,l_name from new_Table');
ExecSQL;
end;
مجددا به خاطر تاخير عذر ميخوام .
موفق باشيد .
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.