Q&A

  • sql검색 에러
query1 : parameter 'e_id' not found 라는 에러가 뜹니다...

str := 'insert into test(id)values (E_id)';
begin
with query1 do
  begin
   close;
   sql.Clear;
   sql.add('select id form test where id = '''+ e_id.text +'''');
   parambyname('e_id').asstring := '%'+ trim(e_id.text)+'%';
   open;
   uid := Query1.FieldByName('id').AsString;
  end;
end;

sql검색 코딩 부분입니다..

계속 검색에 관한거만 하고 있는데 어렵내요 ㅜ.ㅜ

그럼 답변 기다리고 있겠습니다
3  COMMENTS
  • Profile
    하얀까마귀 2002.01.19 21:17
    sql.add(' select id from test where id like :e_id ');
    parambyname('e_id').asstring := '%' + trin(e_id.text)+'%';

    디비안한지 1년이 훨넘어서 다까먹었네요..

    % 를 넣어줄때는 like 를 써야돼요 그리고 되도록이면
    like는 안쓰시는게 좋습니다. 꼭 필요한게 아니라면..
    그럼.

  • Profile
    공성환 2002.01.21 02:41
    제가알기로는 LIKE 문도 인덱스 타는걸로 알고있는데...
    잘못알고있나?
    앞쪽에 %를 붙이면 당연 인덱스를 못타지만 뒤쪽에 붙이면 타는걸로 알고 있는데... 아닌가???

  • Profile
    하얀까마귀 2002.01.19 21:47
    밑에 김영일님 글읽고 찔려서 몇자 더 적습니다. ^^ 에고에고.

    우선 델파이쪽 기본적인책들 보면 대부분 데이타 베이스를 개발을 기준으로

    설명되어 잇어서 이런쪽으로는 잘설명되어 있어요 한번더 살펴보시구요.

    Parambyname 에서 사용되어지는 파라메터는

    sql.add 해서 넣으신 string 내에서 : <-- 요넘 뒤에 잇는 문자와 매치가

    되어야 합니다.

    그렇게 넣거든요..

    그게 아니라면 님처럼 그냥 sql 안에다가 넣을려면

    sql.add(' select id from test where id like %''' + trim(e_id.text) + '%'''');
    요렇게만 하시고 ParamByname 는 사용안하시면 되겠죠.

    % 를 쓸때는 반드시 = 이 아닌 like를 사용해야 됩니다.

    하지만 like는 검색속도를 무지하게 떨어트리는 명령이거든요..

    index를 무시하고 검색하게 되기 때문에 대형 데이타 베이스의 경우에는

    결과를 예측하기 힘듭니다. ( 몇시간이 걸릴지 몇일이 걸릴지.. ㅠㅠ )

    그래서 like는 사용을 되도록이면 안하는게 좋습니다.

    조금 어렵고 둘러가더라도 비교문으로 해결하도록 프로그래밍 하시고

    설계또한 그렇게 하셔야 합니다.

    조건이 id 인데 id는 like로 찾을일이 없을것 같은데 아닌가요?

    보통은 문자열을 검색할때 많이 사용하긴 합니다. 음.. 주소같은거..

    하지만 이런것도 주소 테이블의 필드 설계를 바꾸면 이런작업을 하지 않아도

    되거든요.. 그럼..

    도움이 되셧기를 바랍니다.

    즐거운시간 되세요.

    - 하얀까마귀 -