Q&A

  • 코딩 질문합니다!!(박홍재님 봐주세요~!!)




계속 질문드려서 죄송합니다..ㅠㅠ

알다가도 모르고 해결됐다가 싶다가도 안되고.. 알쏭달쏭하네요,.ㅠ.ㅠ

첨부그림처럼

검색 버튼을 누르면 edit들에 값이 들어가야 합니다..

말은 쉬운데 코딩하기가 어렵네요.ㅠ.ㅠ


procedure Tengeneform.Button1Click(Sender: TObject);
begin
  Query1.Close;
  Query1.SQL.Text:='select * from @tablename'+
                 'where Attribute = @Attribute';
  Query1.SQL.Text:=StringReplace(Query1.SQL.Text,'@tablename', 'data', []);
  Query1.SQL.Text:=StringReplace(Query1.SQL.Text,'@Attribute', 'CRS', []);
  Query1.Open;
// 여기 까지는 결과를 조회하구요.

  if Not(Query1.Eof) then
  // 여기서 Query의 값이 있는지 확인을 하고 값이 있다면 if 절 내를 실행
  //(Eof의 의미는 Query 값의 끝인지를 확인하는 함수)
begin
    Edit1.Text := Query1.FieldByName('필드1').AsString;
    //필드명 1인 값을 읽어서 Edit1 에 넣어준다는 의미임

********* 여기가 이해가 안갑니다.....
필드명 1인 값이 어떤 걸 뜻하는지..... 위에 조회한 내용이 들어가야 하지 않는 건지....
그래야 edit1에 CRS라는게 입력되지 않나요?? 아닌가?
조회한 내용이 'data라는 테이블에서 Attribute가 CRS인걸 찾아라' 이건데...
****************

    if Edit1.Text <> '' then
      Edit1.Text := '바보1'
    else Edit1.Text := '천재';

***********
이 부분은 이해가 가는데요~~
Edit1.Text := Query1.FieldByName('필드1').AsString 이거랑 관계가 있는 건가요??


end  //첫번
4  COMMENTS
  • Profile
    박홍재 2005.09.01 08:29
    죄송 제가 해외에 있는 관계로 글을 보는 것이 늦었네요. TeamB님께서 잘 답변해 주셨는데요.
    그래도 초보가 보시면 조금 이해하기 어려울 듯 해서 다시 답변을 답니다.
    일단 조회의 의미가 어떤 의미인지를 설명을 드린 거구요. 지금 쿼리로는 Data 라는 Table에서
    Attribute 가 CRS 인 값을 조회해서 그 값이 있으면 각 Edit에 값을 넣어주시는 거 같은데요.
    그렇다면 제가 data table의 filed name 이 어떤 것이 있는지 모르니 일단 가정을 해서 코딩을 해 보면
      data 라는 table에 만약 engine_name 이라는 String Field 와 engine_maker 라는 역시 string
    field 와 그리고 마지막 engine_power 라는 Float 값을 가지는 Field 가 있다면 조회 버튼이 눌러 졌을때 값이 있다면 그 값을 이렇게 뿌려 주겠지요.

       engname.Text := Query1.FieldByName('engine_name').AsString;
       engmaker.Text := Query1.FieldByName('engine_maker').AsString;
       engpower.Text := FormatFloat('0.00',Query1.FieldByName('engine_power').AsFloat);

    자 이런 식으로 소스에서는 어디에 어떤 값을 넣어라 라구 지정을 해야 겠지요. 만약 Database Edit를 쓰셨다면 Table의 Field를 바로 연결해 주시면 되지만 Edit 를 주로 많이 사용하니 대부분 이런식으로 Coding을 만들어 갑니다. 이해가 되셨나요.



    위의 if 절의 의미는 님께서 특정한 값이 있으면 어떤 caption이나 Text를 바꾸신다고 해서 넣었던 건데요.
    만약 Edit1.Text 의 값에 Null 즉 Blank 값이 아니라면 Edit1.Text 값을 '바보' 라는 값으로 바꾼다는 건데
    Edit1.Text를 조회해서 Edit1.Text를 바꾼다는 것이 조금 이상하지요. 조건절 말고 변경하는 곳에 버튼이나 다른 것의 Caption을 바꾸는 것으로 변경해 보시면 이해가 가실 겁니다.

    지금 현재 Database의 설정을 보면 Alias를 선택하신 것이 아니라 Database에서 MSSQL을 선택을 하셨네요.  그럼 설정이 조금 까다로와 집니다. 전에 BDE 설정에서 MSSQL 의 ODBC 설정이 성공을 하셨다면 아마 현재 님의 BDE 상에 그 ODBC 설정 Alias 가 남아 있을 겁니다. 중간의 Alias 항목에서 그 성공한 설정 이름을 선택하시고 Dafault 버튼을 누르시면 BDE을 자동으로 가져 옵니다. 그 가져온 설정을 가지고 조건을 조금 조정(유저명 및 Password 설정등등)을 만져주시고 저장해 주시구요. 그리고 나와서 Object Inspepector에서 Database Name을 설정해 주시구요. 그것을 Query와 연결해 주세요. 그럼...
    또 궁금한점 있으시면 질문주세요. 딴 이름은 빼구..^^
  • Profile
    TeamB 2005.08.31 23:12
    박홍재님은 아니지만..


    data 테이블의 필드1 인 컬러명의 값을 Edit1.text 에 대입합니다. (필드1 에 어떤값이 있는지는...) Attribute 컬럼의 값이 'CRS' 인 레코드들을 검색해 첫번째 레코드의 컬럼 '필드1' 인값을 가지는거죠


    레코드가 검색이 되었거나 아니라면...Edit1.Text에 값이 있거나 없겟죠?


    F7은 트레이스 입니다. 주로 디버깅할때 사용하죠. F9로 실행하세요.. 에러가 나시나요? 에러메시지를 올리시거나 캡쳐한 화면을 올려주세요


    역시 에러메세지를...


    TDatabase나 TQuery, TTable류의 DatabaseName 은 데이터파일의 실제경로의 풀경로나 엘리어스를 설정합니다. 캡쳐한 화면을 보니 engene 이라는 엘리어스를 설정하셨군요 그것을 써넣어주세요

    그람~

  • Profile
    윤경미 2005.08.31 23:40
    답변 감사드립니다~~~~

    그럼

    begin
        Edit1.Text := Query1.FieldByName('Attribute').AsString;
        
        if Edit1.Text <> '' then
          Edit1.Text := '바보'
        else Edit1.Text := '천재';

    end
    else
    Showmessage('값이 없습니다.'); end;

    하면 어떻게 되나요???

    말씀해주신 f9키를 이용해 실행을 하니 .exe 가 뜹니다..

    그래서 검색 버튼을 눌러보니 반응이 없고 멈춰버립니다..ㅠㅠ


    database 컴포넌트는

    에러 구문이라고 할 것 없이 true로 바꾸려고 하면 프로그램이 멈춰버려서 다시 껐다가 켜야 합니다..

    engene을 tquery에서 선택했는데요  source에서 tquery의 name(query1 -> 초기상태)이 보이지가

    않습니다... 뭐가 잘 못 된 걸까요??
  • Profile
    TeamB 2005.09.01 00:20

    M$-SQL에 접속을 하지 못하는것 같군요.

    쪽지확인하세요