블로그 이미지
자료에 문제가 있을 경우, 확인하는대로 삭제처리 하겠습니다. 즐거운 하루 되시길...
03-30 00:35
Total
Today
Yesterday

카테고리

분류 전체보기 (199)
이야기방 (20)
공부방 (173)
개발관련&IT용어.. 등등; (7)
잡다구니 (8)
OS & Server (13)
NetWork (3)
DB (30)
Delphi (47)
LUA (0)
JAVA (6)
HTML (10)
XML (1)
ASP (5)
JSP (2)
자바스크립트 (27)
CSS (8)
ETC.. (6)
개발노트&관련잡다구니 (6)

1. dummy 테이블을 이용해서, 데이터 체크 후 Insert / Update

MERGE INTO Employees AS E
USING (SELECT 1 AS employee_id, 'PARK' AS name, 'Developer' AS position from SYSIBM.SYSDUMMY1) 
--USING (SELECT :PARAM1 AS employee_id, :PARAM2 AS name, :PARAM3 AS position from SYSIBM.SYSDUMMY1) 
   AS S ON E.employee_id = S.employee_id
WHEN MATCHED THEN 
    UPDATE SET E.name = S.name, E.position = S.position
WHEN NOT MATCHED THEN 
    INSERT (employee_id, name, position)
    VALUES (S.employee_id, S.name, S.position);

 

- 델파이 FireDac으로 파라미터로 데이터 설정 시 에러 발생

- 쿼리로는 정상 실행

 

2. Values를 이용해서, 데이터 체크 후 Insert / Update

MERGE INTO Employees AS E
USING (VALUES (1, 'PARK', 'Developer')) AS S(employee_id, name, position)
--USING (VALUES (:PARAM1, :PARAM2, :PARAM3)) AS S(employee_id, name, position)
ON E.employee_id = S.employee_id
WHEN MATCHED THEN 
    UPDATE SET E.name = S.name, E.position = S.position
WHEN NOT MATCHED THEN 
    INSERT (employee_id, name, position)
    VALUES (S.employee_id, S.name, S.position);

 

- 델파이 FireDac으로 파라미터로 데이터 설정 시 에러 발생

- 쿼리로는 정상 실행

 

3. 테이블의 데이터 건수로 Insert / Update

MERGE INTO Employees AS E
USING (SELECT COUNT(*) AS CNT FROM Employees WHERE employee_id = '1') 
--USING (SELECT COUNT(*) AS CNT FROM Employees WHERE employee_id = :PARAM1) 
   AS S
   ON S.CNT > 0
WHEN MATCHED THEN 
    UPDATE SET E.name = 'PARK', E.position = 'Developer'
--    UPDATE SET E.name = :PARAM2, E.position = :PARAM3  
WHEN NOT MATCHED THEN 
    INSERT (employee_id, name, position)
    VALUES (1, 'PARK', 'Developer');
--    VALUES (:PARAM1, :PARAM2, :PARAM3);

 

- 델파이 FireDac으로 파라미터로 호출해도 정상처리~

 

※ 사용환경에 맞게 쓰면 될 듯!

 

- 출처 : 우리의 친구 ChatGPT 등등

Posted by 래채
, |

use!

 uses
  Windows, TlHelp32;

 

function 정의!

function GetThreadCount(ProcessID: DWORD): Integer;
var
  Snapshot: THandle;
  ThreadEntry: TThreadEntry32;
begin
  Result := 0;
  Snapshot := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
  if Snapshot <> INVALID_HANDLE_VALUE then
  try
    ThreadEntry.dwSize := SizeOf(ThreadEntry);
    if Thread32First(Snapshot, ThreadEntry) then
    repeat
      if ThreadEntry.th32OwnerProcessID = ProcessID then
        Inc(Result);
    until not Thread32Next(Snapshot, ThreadEntry);
  finally
    CloseHandle(Snapshot);
  end;
end;

 

호출 예시!

var
  ProcessID: DWORD;
  ThreadCount: Integer;
begin
  ProcessID := GetCurrentProcessId; // 현재 프로세스 ID를 얻습니다.
  ThreadCount := GetThreadCount(ProcessID);
  // 이제 ThreadCount 변수에 특정 프로세스의 스레드 수가 저장됩니다.
end;

 

 

출처 : 우리의 친구 chatGPT

Posted by 래채
, |
  procedure TransparentPanel(var Target : TPanel);
  var
    I : Integer;
    FullRgn, ClientRgn, ControlRgn : THandle;
    Margin, MarginX, MarginY, X, Y : Integer;
  begin
    Margin  := (Target.Width - Target.ClientWidth) div 2;
    FullRgn := CreateRectRgn(0, 0, Target.Width, Target.Height);
    MarginX := Margin;
    MarginY := Target.Height - Target.ClientHeight - Margin;
    ClientRgn :=
      CreateRectRgn(
        MarginX
        , MarginY
        , MarginX + Target.ClientWidth
        , MarginY + Target.ClientHeight
      );

    CombineRgn(FullRgn, FullRgn, ClientRgn, RGN_DIFF);

    for I:=0 to Target.ControlCount-1 do begin
      X := MarginX + Target.Controls[I].Left;
      Y := MarginY + Target.Controls[I].Top;
      ControlRgn :=
        CreateRectRgn(
          X
          , Y
          , X + Target.Controls[I].Width
          , Y + Target.Controls[I].Height
        );
      CombineRgn(FullRgn, FullRgn, ControlRgn, RGN_OR);
    end;

    SetWindowRgn(Target.Handle, FullRgn, True);
  end;

 

원본 : 어느 고수님.. 

Posted by 래채
, |