Как это исправить в Delphi - PullRequest
0 голосов
/ 30 октября 2019

У меня есть таблица Dbf, и мне нужно вставить год и дату в столбец, программа не выдает никаких ошибок, но столбец пуст

Я пытался использовать запрос sql запросов, но не смог

   procedure TForm1.Button1Click(Sender: TObject);
   var year:string;
   pogr_d:string;
   begin
   pogr_d:='';
   year:='';
   year:=copy(formatdatetime('yyyy',(DateTimePicker1.Date)),1,4);
   Label1.Caption:=year;
   Label2.Caption:=pogr_d;
   if opendialog1.Execute then
   if opendialog1.Filename <> null then
   begin

        TextReader1.FileName := opendialog1.FileName;
        try
              ImportFromText.Execute;
              FDQuery1.Close;
              FDQuery1.Active;
              FDQuery1.SQL.Text:='update g_rabn.dbf set 
    year='+''''+year+'''' +' where year='+''''+'''';
              FDQuery1.ExecSql;

        Except
                  On E : Exception Do
                  ShowMessage(E.Message);
        end;



  end;




  end;

  end.

Что должно произойти:

Что у меня есть:

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

Вы можете использовать этот код в качестве примера. Я предположил, что поля [Дата] и [Год] имеют тип NVARCHAR (4). Я также предположил, что вы уже настроили соединение с базой данных FConn.

. Для воспроизведения этого примера вам понадобится Form1 с DBGrid1, DateTimePicker1, Edit1, ADOQuery1, ADOQuery2, DataSource1 и двумя кнопками: Button1 для вставки новой записи иButton2 для обновления существующих.

Свяжите свой DBGrid1 с ADOQuery1 через DataSource1.

uses
  ADODB, DB, DateUtils;

type
  TForm1 = class(TForm)
  ...
  private
    { Private declarations }
    FConn: TADOConnection;
    FYear: Integer;
    FMonth: Integer;
    FDay: Integer;
    FYearUpd: String;
  ...

const
  SQL1 = 'INSERT [Dbf] ([Date], [Year]) VALUES (''%s%s'', ''%s'')';
  SQL2 = 'UPDATE [Dbf] SET [Year] = ''%s'' WHERE Year = ''%s''';

procedure TForm1.FormCreate(Sender: TObject);
begin
  // FConn connection initialization

  ADOQuery1.Connection := FConn;
  ADOQuery2.Connection := FConn;
  ADOQuery1.SQL.Text := 'SELECT * FROM Dbf';
  ADOQuery1.Open;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  FYear := YearOf(DateTimePicker1.Date);
  FMonth := MonthOf(DateTimePicker1.Date);
  FDay := DayOf(DateTimePicker1.Date);

  // Inserting a new record.
  ADOQuery2.SQL.Text := Format(SQL1, [IntToStr(FDay), IntToStr(FMonth), IntToStr(FYear)]);
  ADOQuery2.ExecSQL;

  // Refreshing the DBGrid.
  ADOQuery1.Close;
  ADOQuery1.Open;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  FYear := YearOf(DateTimePicker1.Date);
  FYearUpd := Trim(Edit1.Text);

  // Updating existing records.
  ADOQuery2.SQL.Text := Format(SQL2, [FYearUpd, IntToStr(FYear)]);
  ADOQuery2.ExecSQL;

  // Refreshing the DBGrid.
  ADOQuery1.Close;
  ADOQuery1.Open;
end;
0 голосов
/ 30 октября 2019

Вы уверены, что год содержит пустую строку? Может ли это быть NULL? Вы можете попробовать это sql:

'update g_rabn.dbf set year='+''''+year+'''' +' where coalesce(year,'''')='+''''+''''
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...