ورود

View Full Version : مشکل در Select تو در تو



drstrike
پنج شنبه 03 شهریور 1390, 23:47 عصر
سلام....
کد زیر نگاه کنید:
ADO.Close;
ADO.SQL.Clear;
ADO.SQL.Text := 'SELECT * FROM Table WHERE GID IN(SELECT ID FROM Table1 WHERE FieldName = ' + QuotedStr(Str) + ')';
Tbale1.Open;
ADO.open;
فرض کنید Str مقدار X رو میگیره.اررور میده،میگه :

Parametr X has not default value

pezhvakco
جمعه 04 شهریور 1390, 09:50 صبح
شما در کدتون دو دستور فراخوانی اطلاعات دارین :

Tbale1.Open;
ADO.open;

دستورات کوئری که مشخص و بدون پارامتر است ولی اون جدول (Table) دارای چه پارامتر هایی است .


فرض کنید Str مقدار X رو میگیره.اررور میده
STR یه متغییر درون برنامه ای است و به داده های بانک ربطی نداره .
این X کجا و چه طوری تعریف شده .

drstrike
جمعه 04 شهریور 1390, 10:44 صبح
ببینید، من دو تا جدول دارم. میخوام اولی را بر اساس دومی فیلتر کنم.

فرض کنید یک جدول مربوط به اطلاعات دانشجویان هست و دیگری مربوط به اطلاعات انتخاب واحد.حالا میخوام از جدول انتخاب واحد اطلاعات دانشجویان مرد را واکشی کنم.
Str := 'مرد';
َADOQuery.Close;
ADOQuery.SQL.Clear;
ADOQuery.SQL.Text := 'SELECT * FROM Uniq_Select WHERE StudentID IN (SELECT ID FROM Student WHERE Sex = ' + Str + ')';
ADOQuery1.open;
ADOQuery.open;

در حالت پیش فرض دوتا جدول هم خصلت Active شون False هست؛ به همین خاطر ADOQuery1 (جدول دانشجو) رو هم open می کنم.
در ضمن هر جدول در یک پایگاه داده جدا قرار دارند.
ممنون میشم راهنمایی کنید

pezhvakco
جمعه 04 شهریور 1390, 14:14 عصر
Parametr X has not default value
این پارامتر X رو کجا تعریف کردین .

در ضمن هر جدول در یک پایگاه داده جدا قرار دارند.
یعنی جدول Uniq_Select در یک پایگاه داده و جدول Student در پایگاه داده دیگه است .
خوب چرا این طور طراحی کردین.

SELECT *
FROM Table_01
WHERE (Col_01 IN
(SELECT Col_02
FROM Db_Name.dbo.Table_02))
این قسمت کد برای چیه :

ADOQuery1.open;
ADOQuery.open;

در حالت پیش فرض دوتا جدول هم خصلت Active شون False هست؛ به همین خاطر ADOQuery1 (جدول دانشجو) رو هم open می کنم.
فعال بودن یا نبودن ابزار ارتباطی با جدول ها تاثیری در کار شما نداره .

توجه : بهتره زمانی که میخوایین یه پرسشی جایی بنویسین اطلاعات کامل بدین و از دیدگاه خودتون و با توجه به دانسته های خودتون ننویسید .

drstrike
شنبه 05 شهریور 1390, 20:18 عصر
یعنی جدول Uniq_Select در یک پایگاه داده و جدول Student در پایگاه داده دیگه است .
خوب چرا این طور طراحی کردین.
دوست عزیز تو پست قبلی ام گفتم که : فرض کنید


این قسمت کد برای چیه :
تو این مورد من اشتباه می کردم :خجالت:

مشکل رو حل کردم. اگه دو جدول در دو پایگاه داده جدا از هم طراحی شده باشند باید جدول خارجی رو با نام پایکاه داده فراخوانی کرد.
خط چهارم مثال پست 3 باید به این شکل تغییر کنه:
ADOQuery.SQL.Text := 'SELECT * FROM Uniq_Select WHERE StudentID IN (SELECT ID FROM DB.mdb.Student WHERE Sex = ' + Str + ')';


توجه : بهتره زمانی که میخوایین یه پرسشی جایی بنویسین اطلاعات کامل بدین و از دیدگاه خودتون و با توجه به دانسته های خودتون ننویسید .
چشم:لبخندساده: