نمایش نتایج 1 تا 3 از 3

نام تاپیک: بدست آوردن شاخه اصلی ، ParentID و زیر شاخه ها و سلسله مراتب در Access

  1. #1

    Question بدست آوردن شاخه های اصلی ، ParentID و زیر شاخه ها و سلسله مراتب DBTreeVeiw در Access با AdoQuery

    با سلام
    جستجو کردم اما به نتیجه نرسیدم، برای SQL بصورت تابع(http://www.30sharp.com/ShowArticle.a...116&AuthorID=2) پیدا شد اما من برای اکسس و امکانات ADO ترجیحا AdoQuery میخوام لطفا راهنمایی کنید.
    یه دیتابیس با فیلدهای مشخص داریم (که ساختار درختی نامحدود با ParentID را تهیه میکند) که به BDTreeVeiw‌ وصل میشه و همه چیز هم بدرستی کار میکنه. (Fields=ID,Name,parentID)
    من میخوام پس از انتخاب یک عنوان از این ساختار درختی که در DBTreeveiw نمایش داده میشود دو لیست شامل :
    1- لیست ID همه زیر مجموعه های این مورد انتخاب شده (مثلا یه تابع باشه که ID عنوان را به همراه یک AdoQuery گرفته و لیست ID تمام زیر مجموعه ها را بصورت یک string مثل 44,85,110,145 برگرداند)
    2- لیست ID‌ همه سر شاخه ها یا ParentID های مورد انتخابی (مثلا یه تابع باشه که ID عنوان را به همراه یک AdoQuery گرفته و لیست ID تمام سرشاخه ها را بصورت یک string مثل 44,85,110,145 برگرداند)

    لطفا راهنمایی کنید که با AdoQuery و Access چجوری میتونم این لیست رو بدست بیارم.
    خواهشن اگه میگید جستجو کن، لطفا آدرس یا لینک مورد را بفرمایید. همه کارهای برنامه ام آماده است بجز این مورد.
    با تشکر
    آخرین ویرایش به وسیله FirstLine : سه شنبه 21 اسفند 1386 در 14:22 عصر دلیل: تاکید بر فوریت و ضروری بودن استفاده از AdoQuery و Access

  2. #2
    با سلام
    این تابع را برای این کار نوشته ام اما نمیدونم کجاش ایراد داره.
    لطفا این تابع بازگشتی زیر را تصحیح کنید که با دادن ID یک رکورد لیست همه Parent_ID ها رو بر گردونه.
    با تشکر

    Function MH_ParentID_Get_Parent(int_ID:Integer ; obj_AdoQuery:TADOQuery ):String ;
    begin
    try
    obj_AdoQuery.Close;
    obj_AdoQuery.SQL.Clear;
    obj_AdoQuery.SQL.Add( 'Select * From Group_Name Where Group_ID=' + IntToStr(int_ID) );
    obj_AdoQuery.Open;

    if obj_AdoQuery.FieldByName('Group_ParentID').AsInteg er =0 then
    Result := obj_AdoQuery.FieldByName('Group_ID').AsString
    else
    Result := ' , ' + MH_ParentID_Get_Parent(obj_AdoQuery.FieldByName('G roup_ParentID').AsInteger , obj_AdoQuery);


    except On E:Exception Do
    Result := '0';
    end;
    end;


  3. #3

    Smile

    با سلام
    بالاخره تونستم با کلی زحمت این سه تا تابع رو بنویسم و درست هم کار میکنه.
    اما تابع آخر در تعداد لول بالا یه مقداری خطا داره.
    لطفا تابع آخر را بهینه و رفع اشکال کنید.
    با تشکر



    Function MH_ParentID_Get_ParentID_From_ID (int_ID:Integer ; obj_AdoQuery:TADOQuery ):Integer ;
    begin
    try
    obj_AdoQuery.Close;
    obj_AdoQuery.SQL.Clear;
    obj_AdoQuery.SQL.Add( 'Select * From Group_Name Where Group_ID=' + IntToStr(int_ID) );
    obj_AdoQuery.Open;
    if obj_AdoQuery.RecordCount =0 Then
    Result := 0
    else
    Result := obj_AdoQuery.FieldByName('Group_ParentID').AsInteg er ;
    except On E:Exception Do
    Result := 0;
    end;
    end;



    Function MH_ParentID_Get_ParentID_From_ID_ALL(int_ID:Intege r ; obj_AdoQuery:TADOQuery ):String ;
    var
    int_Temp : Integer ;
    int_Loop : integer;
    str_Result:String;
    begin
    try
    int_Temp := 1;
    str_Result := '';
    int_Temp := MH_ParentID_Get_ParentID_From_ID( int_ID, obj_AdoQuery);
    for int_Loop:=1 to 20 do
    begin
    if int_Temp > 0 then
    begin
    int_ID := MH_ParentID_Get_ParentID_From_ID(int_Temp, obj_AdoQuery);
    str_Result := str_Result + ', ' + IntToStr(int_Temp) ;
    int_Temp :=int_ID;
    end else begin
    Result := copy(str_Result, 2 , Length(str_Result)) ;
    exit;
    end;
    end;
    except On E:Exception Do
    end;
    end;





    Function MH_ParentID_Get_ID_From_ParentID (int_ParentID:Integer ; obj_AdoQuery:TADOQuery ):String ;
    Var
    str_Result:String ;
    begin
    try
    str_Result := '';
    obj_AdoQuery.Close;
    obj_AdoQuery.SQL.Clear;
    obj_AdoQuery.SQL.Add( 'Select * From Group_Name Where Group_ParentID=' + IntToStr(int_ParentID) );
    obj_AdoQuery.Open;
    if obj_AdoQuery.RecordCount =0 Then
    begin
    Result := '';
    exit;
    end else begin
    while not obj_AdoQuery.Eof=True do
    begin
    str_Result := str_Result + ', ' + obj_AdoQuery.FieldByName('Group_ID').AsString;
    obj_AdoQuery.Next;
    end;
    end;
    Result := copy(str_Result, 2 , Length(str_Result)) ;
    except On E:Exception Do
    Result := '';
    end;
    end;



    این تابع رو بازبینی کنید



    Function MH_ParentID_Get_ID_From_ParentID_ALL(int_ID:Intege r ; obj_AdoQuery:TADOQuery ):String ;
    var
    int_Loop : Integer ;
    str_Result, str_Result_Temp, str_Result_Temp_ID:String;
    str_SQL :String;
    str_int_In , str_int_NotIn :String ;
    begin
    try
    str_int_In := IntToStr(int_ID);
    str_int_NotIn := '';
    str_Result := MH_ParentID_Get_ID_From_ParentID( int_ID , obj_AdoQuery) ;

    for int_Loop:=1 to 20 do
    begin
    obj_AdoQuery.Close;
    obj_AdoQuery.SQL.Clear;
    str_SQL :='Select DISTINCT Group_ID From Group_Name Where Group_ParentID IN (' + str_Result +')' ;
    str_SQL := trim(str_SQL);
    if copy(str_SQL , length(str_SQL)-1,1)=',' then
    str_SQL := copy(str_SQL , 1,length(str_SQL)-2) + ')' ;
    str_SQL := AnsiReplaceStr(str_SQL , ',,',',');
    obj_AdoQuery.SQL.Add( str_SQL);
    obj_AdoQuery.Open;

    if obj_AdoQuery.RecordCount > 0 then
    begin
    str_Result_Temp := '';
    while not obj_AdoQuery.Eof=True do
    begin
    str_Result_Temp_ID := obj_AdoQuery.FieldByName('Group_ID').AsString;
    if pos( str_Result_Temp_ID , str_Result ) <1 Then
    str_Result_Temp := str_Result_Temp + ',' + str_Result_Temp_ID;
    obj_AdoQuery.Next;
    end;
    str_Result_Temp := copy(str_Result_Temp, 2 , Length(str_Result)) ;

    if str_Result_Temp <>'' Then str_Result := str_Result + ',' + str_Result_Temp;
    str_int_NotIn := str_Result_Temp ;
    end else begin
    str_Result_Temp := '';
    str_int_NotIn :='';
    end;
    str_Result := AnsiReplaceStr(str_Result , ',,',',');
    end;
    Result := str_Result;
    except On E:Exception Do
    end;
    end;

تاپیک های مشابه

  1. کدنویسی در access
    نوشته شده توسط noosha_t در بخش Access
    پاسخ: 3
    آخرین پست: شنبه 04 اسفند 1386, 17:27 عصر
  2. inbound access list & out bound access list
    نوشته شده توسط soroosh_i58 در بخش شبکه و Networking‌
    پاسخ: 2
    آخرین پست: جمعه 29 اردیبهشت 1385, 10:55 صبح
  3. مرتب سازی access.مهم
    نوشته شده توسط farhadamin در بخش SQL Server
    پاسخ: 1
    آخرین پست: جمعه 22 اردیبهشت 1385, 10:46 صبح
  4. چطور میتوانم در vb(ado)کد نویسی جدولم را از بانک access حذف کنم؟
    نوشته شده توسط ساوالان در بخش برنامه نویسی در 6 VB
    پاسخ: 1
    آخرین پست: پنج شنبه 24 فروردین 1385, 11:50 صبح
  5. کد تشخیص باز بودن یا در حال استفاده بودن دیتابیس access
    نوشته شده توسط abbas8786 در بخش برنامه نویسی در 6 VB
    پاسخ: 9
    آخرین پست: جمعه 28 بهمن 1384, 22:21 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •