본문 바로가기

Development/Delphi

query in 절 만들기 function ListToText(const Args: array of string): string; overload;function ListToText(const Args: array of integer): string; overload; function ListToText(const Args: array of string): string;var i: integer;begin result := '('; for i := 0 to high(Args) do result := result+QuotedStr(Args[i])+','; result[length(result)] := ')';end; function ListToText(const Args: array of integer): string;var i: ..
FieldByName 속도 향상 FieldByName() 내부적으로 이름검색을 위해 loop 를 돌린다. 아래처럼 각각의 필드를 먼저 검색해서 찾은후 필드의 데이터셋만 이동하도록 한다. 필드.dataset 의 커서가 이동할 뿐 더이상 필드를 찾는 중복작업은 하지 않아도 된다.var F1, F2, F3: TField; Grid.RowCount := Query.RecordCount; J := 0; F1 := Query.FieldByName('Value1'); F2 := Query.FieldByName('Value2'); F3 := Query.FieldByName('Value3'); while not Query.EOF do begin Grid.Cells[0,J]:=F1.AsString; Grid.Cells[1,J]:=F2.AsString; ..
TCheckbox.checked 설정시 onClick 이벤트 발생시키지 않기 Checkbox: TCheckbox; Checkbox.checked 속성을 변경하면 Checkbox.onClick 이벤트가 발생한다.이를 막아야할 경우가 있을때 아래와 같이 처리하자. //단순히 checked 속성을 변경할때는 Checkbox.onClick := nil;Checkbox.checked := True;//Checkbox.onClick 이벤트 핸들러 프로시저가 CKBPhone4Click(Sender:TObject) 이면Checkbox.onClick := CKBPhone4Click; 속성값 변경전에 이벤트핸들러 연결을 없애버리고, 속성값 변경후 다시 원래의 이벤트 핸들러를 연결해준다.이렇게 하면 플래그를 만들어서 처리할 필요없이, 핸들러 끊기/연결 로 처리가 깔끔하다.
TComboBox/TDBComboBox.AddObject Integer, String, Object 1-1. to store the integer values:with qryGroups do begin First; while not Eof do begin cbGroups.Items.AddObject(FieldByName('Name').AsString, TObject(FieldByName('ID').AsInteger)); Next; end; end;1-2. to read the integer value from selected item:strID := LongInt(cbGroups.Items.Objects[cbGroups.ItemIndex]); 2-1. to store the string values:with qryGroups do begin First; while not Eof do begin cbGr..
로컬 IP 가져오기 function TForm1.GetLocalAddress:string; var wsaData : TWSAData; slocal : array[0..255] of AnsiChar; phos : PHostEnt; addr : PChar; begin Result := ''; if (WSAStartup(MAKEWORD(1, 1), wsaData) 0) then exit; if (gethostname(slocal, sizeof(slocal)) = SOCKET_ERROR) then exit; phos := gethostbyname(slocal); if phos = nil then exit; addr := PChar(phos.h_addr_list^); Result := inet_ntoa(PInAddr(addr)^);..
Form 생성 및 해제 @ 첫번째 질문 - Form생성방법의 차이점에 대해 먼저 첫번째와 두번째에서 size조절부분은 빼고 생각하겠습니다. 1) 첫번째 NewApp := TForm_Second.Create(Main_Form); 2) 두번째 Application.CreateForm(TForm_Second, Form_Second); [공통점] - 먼저 공통좀은 둘다 TForm_Second 라는 클래스를 생성하는 합니다. 뭐 이건 잘 아실테구.. [차이점들..] 차이점은 의외로 여러개 있습니다. 1) 첫번째는 NewApp 라는 변수에 생성된 폼이 할당되구 두번째는 Form_Second라는 변수에 생성된 폼이 할당되는것이 다릅니다. 2) 그리고 첫번째는 폼의 Owner가 Main_Form이구 두번째는 Owner가 Application..
TDataSet 관련 (TQuery, TFDQuery) #. TDataSet.CachedUpdate := True; DB 에 다이렉트 적용이 아닌 클라이언트 메모리에서 처리후 DB 적용 - CachedUpdate 예제 FDQuery1.CachedUpdate := True; //클라이언트 캐쉬를 이용한다 FDQuery1.Append; ... FDQuery1.Post; //클라이언트 캐쉬에 적용(확정) 한다. FDConnection1.StartTransaction; // 트랜잭션 시작 iErrors := FDQuery1.ApplyUpdates; // 실제 DB 적용 if iErrors = 0 then begin FDQuery1.CommitUpdates; //클라이언트에 남아 있는 변경로그를 비운다. FDConnection1.Commit; // 실제 DB comm..
프로퍼티, property 깊이가 얕으니 언제 써야할지도 잘 모르겠네... 의미는 아주 좋은데.. ㅎㅎ원문 : http://blog.cyworld.com/junqkim/7682933