2017-10-05 5 views
0
iexc := round(iexc/icount); 
    iint := round(iint/icount); 
    inau := round(inau/icount); 
    iovr := round(iovr/icount); 

    adoquery1.SQL.Text := 'update Tickets_Tbl set Excitment = iexc where 
    RollerCoaster = "'+sride+'"'; 
    adoquery1.ExecSQL; 
    adoquery1.SQL.Text := 'update Tickets_Tbl set Intensity = iint where 
    RollerCoaster = "'+sride+'"'; 
    adoquery1.ExecSQL; 
    adoquery1.SQL.Text := 'update Tickets_Tbl set Nausea = inau where 
    RollerCoaster = "'+sride+'"'; 
    adoquery1.ExecSQL; 
    adoquery1.SQL.Text := 'update Tickets_Tbl set Overall = iovr where 
    RollerCoaster = "'+sride+'"'; 
    adoquery1.ExecSQL; 

주된 문제점은 코드를 실행할 때 필드 업데이트의 기본값이 업데이트되지 않는다는 것을 계속한다는 것입니다. 도와주세요.Delphi 10을 사용하여 MS Access에서 정수 변수로 정수 값 업데이트

+2

델파이에 대해 잘 모르겠지만 (다른 줄을 기반으로)'adoquery1.SQL.Text : = 'update Tickets_Tbl set Excitment = iexc where'은'adoquery1.SQL.Text : ='update 여야합니다. Tickets_Tbl excitment = '+ iexc +'where' (즉, 프로그램의 값을 SQL 문에 삽입하고자 함) – YowE3K

+1

문제는 해당 변수 대신 상수 문자열'iexc'를 사용한다는 것입니다. 그러나 매개 변수를 사용하십시오. – Victoria

답변

1

문제는 값을 올바르게 설정하는 대신 변수 이름을 하드 코딩하여 매개 변수가있는 쿼리 BTW를 사용하여 수행해야한다는 것입니다. 또한, 귀하의 SQL은 끔찍한; UPDATE을 여러 번 반복하는 대신 단일 UPDATE에서이 작업을 수행 할 수 있습니다. 이것은 당신이 시작해야

합니다 (#13에 대해 아래 참고 참조)

iexc := round(iexc/icount); 
iint := round(iint/icount); 
inau := round(inau/icount); 
iovr := round(iovr/icount); 

AdoQuery1.SQL.Text := 'update Tickets_Tbl'#13 + 
         'set Excitement = :iexc,'#13 + 
         ' Intensity = :iint,'#13 + 
         ' Nausea = :inau,'#13 + 
         ' Overall = :iovr'#13 + 
         'where RollerCoaster = :sride'; 
AdoQuery1.Parameters.ParamByName('iexc').Value := iexc; 
AdoQuery1.Parameters.ParamByName('iint').Value := iint; 
AdoQuery1.Parameters.ParamByName('inau').Value := inau; 
AdoQuery1.Parameters.ParamByName('iovr').Value := iovr; 
AdoQuery1.Parameters.ParamByName('sride').Value := sride; 
AdoQuery1.ExecSQL; 

코드의 #13은 단순히 당신에 대해 제대로 걱정하지 않아도 때문에 쉽게 캐리지 리턴입니다 각 연속 행의 끝 또는 시작 앞뒤에 공백을 삽입합니다. 기본적으로 SQL Server Management Studio에 줄 단위로 쿼리를 입력하는 것과 같습니다. 각 줄의 끝에 을 입력하고을 입력하십시오. 각 줄에 대해 AdoQuery1.SQL.Add을 사용하여 똑같은 작업을 수행 할 수 있지만 SQL을 복사하고 테스트 또는 디버깅 또는 수정을 위해 외부에서 실행해야 할 때 더 어렵게 만듭니다. 위의 하나 개인적으로 당신을 위해 더 쉽고 더 읽기 중

AdoQuery1.SQL.Clear; 
AdoQuery1.SQL.Add('update Tickets_Tbl'); 
AdoQuery1.SQL.Add('set Excitement = :iexc,'); 
AdoQuery1.SQL.Add('Intensity = :iint,'); 
AdoQuery1.SQL.Add('Nausea = :inau,'); 
AdoQuery1.SQL.Add('Overall = :iovr'); 
AdoQuery1.SQL.Add('where RollerCoaster = :sride'); 

사용과 유사하다. 필자는 클립 보드에서 일반 SQL을 가져 와서 '#13 +과 함께 자동으로 델파이의 코드 편집기에 붙여 넣을 수있는 유틸리티가 있거나, '' 문자와 #13 +이 포함 된 따옴표로 묶인 텍스트를 가져 와서 자동으로 제거하는 유틸리티를 사용합니다. 수동 정리없이 SSMS 나 Access 또는 다른 SQL 유틸리티에 붙여 넣을 수 있습니다.

+0

왜 # 13이지 # 13 # 10이 아니겠습니까? – kobik

+0

@kobik : 둘 다 사용할 필요가없는 것 같아서. 위와 같이 프로그램 코드에서와 내 유틸리티가 코드를 일반 텍스트로 다시 변환 할 때 둘 다 잘 작동합니다. 필요없는 경우 모든 행에 추가로'# 10 '을 입력해야하는 이유는 무엇입니까? :-) 편집 해 주셔서 감사합니다. 좋은 캐치 - 나는 교정 할 때 그것을 놓쳤다. –

+0

감사합니다. 나중에 작동하는지 확인합니다. –