Sayfayı Yazdır | Pencereyi Kapat

Syntax Error

Nereden Yazdırıldığı: Clomosy | Forum
Kategori: Genel Programlama
Forum Adı: Genel İşlemler
Forum Tanımlaması: TRObject dili ile programlama yaparken karşılaşılan genel işlemler
URL: https://forum.clomosy.com.tr/forum_posts.asp?TID=1190
Tarih: 04 Eylül 2025 Saat 03:48
Program Versiyonu: Web Wiz Forums 12.07 - https://www.webwizforums.com


Konu: Syntax Error
Mesajı Yazan: Emetullah Emine
Konu: Syntax Error
Mesaj Tarihi: 28 Ağustos 2025 Saat 15:24
Syntax Error Alıyorum 82.satırda 

var
  myForm: TclForm;
  TopBarPnl, BodyPnl, NavPnl: TclProPanel;
  StepsContainerPnl: TclProPanel;
  TitleLbl, SkinTypeLbl, DayNameLbl, DayIndexLbl: TclProLabel;
  RefreshBtn, PrevDayBtn, NextDayBtn, BackBtn: TClProButton;
  StepsMemo: TclMemo;
  Rest: TclRest;
  API_KEY, RequestBody: String;
  email, LastSkinType, RoutineRawText: String;
  CurrentDay: Integer;
  DaysCount: Integer;
  DaysList: TClArrayString;
  q, qSess: TclSQLiteQuery;
  IsLoading: Boolean;
  

// ------------------------- Yardımcı Fonksiyonlar -------------------------

void DBConnect;
{
  try

    Clomosy.DBSQLiteConnect(Clomosy.AppFilesPath + 'sonn.db3', '');
  except
    ShowMessage('Veritabanına bağlanırken hata: ' + LastExceptionMessage);
  }
}

void CreateRoutineTable;
{
  try
    Clomosy.DBSQLiteQuery.SQL.Text =
      'CREATE TABLE IF NOT EXISTS skin_routine (' +
      'id INTEGER PRIMARY KEY AUTOINCREMENT,' +
      'email TEXT,' +
      'day TEXT,' +
      'timeOfDay TEXT,' +
      'stepOrder INTEGER,' +
      'step TEXT' +
      ')';
    Clomosy.DBSQLiteQuery.OpenOrExecute;
  except
    ShowMessage('Tablo oluşturulurken hata: ' + LastExceptionMessage);
  }
}


void LoadEmailAndSkinTypeFromDB;
{
  email = '';
  LastSkinType = '';
  try
    qSess = Clomosy.DBSQLiteQueryWith('SELECT email FROM app_session WHERE id=1');
    qSess.OpenOrExecute;
    if (not qSess.EOF) email = qSess.FieldByName('email').AsString;
    qSess.Free;

    if email <> ''
    {
      qSess = Clomosy.DBSQLiteQueryWith('SELECT skin_type FROM skin_profile WHERE email=' + QuotedStr(email) + ' ORDER BY id DESC LIMIT 1');
      qSess.OpenOrExecute;
      if (not qSess.EOF) LastSkinType = qSess.FieldByName('skin_type').AsString;
      qSess.Free;
    }
  except
    ShowMessage('Oturum veya cilt tipi okunamadı: ' + LastExceptionMessage);
  }
}


void SaveRoutineToDB;
var
  lines, cols: TClArrayString;
  i: Integer;
  line, dayName, timeOfDay, stepOrder, step: String;
{
    try
    
    
      
        lines = TClArrayString.Create;
        cols  = TClArrayString.Create;


        Clomosy.DBSQLiteQuery.SQL.Text = 'DELETE FROM skin_routine WHERE email=' + QuotedStr(email);
        Clomosy.DBSQLiteQuery.OpenOrExecute;

  
        lines = ClGetStringSplit(RoutineRawText, #10);

        for i = 0 to lines.Count - 1
        {
            line = Trim(lines.GetItem(i));
            if line == '' 
                continue;

            cols = ClGetStringSplit(line, '|');

            if cols.Count == 4 {
            
                dayName   = Trim(cols.GetItem(0));
                timeOfDay = Trim(cols.GetItem(1));
                stepOrder = Trim(cols.GetItem(2));
                step      = Trim(cols.GetItem(3));
                }
                if stepOrder == '' 
                    stepOrder = '0';

                Clomosy.DBSQLiteQuery.SQL.Text = 
                    'INSERT INTO skin_routine (email, day, timeOfDay, stepOrder, step) VALUES (' +
                    QuotedStr(email) + ',' + QuotedStr(dayName) + ',' + QuotedStr(timeOfDay) + ',' + stepOrder + ',' + QuotedStr(step) + ')';
                Clomosy.DBSQLiteQuery.OpenOrExecute;
            
            else
            
                StepsMemo.Lines.Add('Uyarı: atlanan satır (format yanlış): ' + line);
        }    
      

        ShowMessage('Bakım rutini DB kaydedildi.');


        lines.Free;
        cols.Free;
}
    except
        ShowMessage('Rutin DB kaydı sırasında hata: ' + LastExceptionMessage);
  }
}

void LoadDaysFromDB;
var
  qdays: TclSQLiteQuery;
{
  DaysList = TClArrayString.Create;
  try
    qdays = Clomosy.DBSQLiteQueryWith('SELECT DISTINCT day FROM skin_routine WHERE email=' + QuotedStr(email) + ' ORDER BY id');
    qdays.OpenOrExecute;
    while not qdays.EOF
    {
      DaysList.Add(qdays.FieldByName('day').AsString);
      qdays.Next;
    }
    qdays.Free;
  except
  {
    if qdays <> nil 
    qdays.Free;
    ShowMessage('Günler yüklenirken hata: ' + LastExceptionMessage);
    }
  }
}

void RenderDay;
var
  dayName: String;
  qday: TclSQLiteQuery;
  line: String;
{
  try
    if DaysList == nil
    {
      StepsMemo.Lines.Clear;
      StepsMemo.Lines.Add('Henüz rutin verisi yok. "Yenile (AI)" ile oluşturun.');
      Exit;
    }

    if DaysList.Count == 0 
    {
      StepsMemo.Lines.Clear;
      StepsMemo.Lines.Add('Henüz kayıtlı gün yok.');
      Exit;
    }

    if CurrentDay < 0 CurrentDay = 0;
    if CurrentDay > DaysList.Count - 1 CurrentDay = DaysList.Count - 1;

    dayName = DaysList.GetItem(CurrentDay);
    DayNameLbl.Text = dayName;
    DayIndexLbl.Text = IntToStr(CurrentDay+1) + '/' + IntToStr(DaysList.Count);

    StepsMemo.Lines.Clear;
    StepsMemo.Lines.Add('=== ' + dayName + ' ===');

    qday = Clomosy.DBSQLiteQueryWith(
      'SELECT timeOfDay, stepOrder, step FROM skin_routine WHERE email=' + QuotedStr(email) +
      ' AND day=' + QuotedStr(dayName) + ' ORDER BY timeOfDay, stepOrder');
    qday.OpenOrExecute;
    
    /*
    while not qday.EOF
    {
      line = qday.FieldByName('timeOfDay').AsString + ' - ' + IntToStr(qday.FieldByName('stepOrder').AsInteger) + ') ' + qday.FieldByName('step').AsString;
      StepsMemo.Lines.Add(line);
      qday.Next;
    }
    */
    qday.Free;
  except
    ShowMessage('Gün render edilirken hata: ' + LastExceptionMessage);
  }
}



void OnRoutineCompleted;
var
  aiText, tmp: String;
{
  try
    IsLoading = False;
    myForm.FormWaiting.Visible = False;

    if Rest.StatusCode >= 400
    {
      StepsMemo.Lines.Clear;
      StepsMemo.Lines.Add('API Hatası: ' + IntToStr(Rest.StatusCode));
      Exit;
    }


    aiText = '';
    try
      aiText = Clomosy.CLParseJSON(Rest.Response, 'candidates.0.output.0.content.0.text');
    except
      aiText = '';
    }

    if aiText == '' 
    {
      try
        aiText = Clomosy.CLParseJSON(Rest.Response, 'candidates.0.output.0.content.0.text');
      except
        aiText = '';
      }
    }

    if aiText == '' 
    {
      StepsMemo.Lines.Clear;
      StepsMemo.Lines.Add('Yanıt metni çıkarılamadı. Gelen ham yanıt DB veya format hatası olabilir.');
      StepsMemo.Lines.Add('Ham cevap:');
      StepsMemo.Lines.Add(Rest.Response);
      Exit;
    }


    tmp = ClGetStringReplace(aiText, '```json', '');
    tmp = ClGetStringReplace(tmp, '```', '');
    tmp = ClGetStringReplace(tmp, #13#10, #10);
    tmp = ClGetStringReplace(tmp, #13, #10);
    tmp = Trim(tmp);

    RoutineRawText = tmp;

    SaveRoutineToDB;

    LoadDaysFromDB;
    CurrentDay = 0;
    if DaysList.Count > 0 RenderDay;
    else StepsMemo.Lines.Add('Kaydedilen rutin bulunamadı.');
  except
    StepsMemo.Lines.Clear;
    StepsMemo.Lines.Add('OnRoutineCompleted içinde hata: ' + LastExceptionMessage);
  }
}

void RestCreate(ABaseUrl, ABody: String);
{
  try
    Rest = TclRest.Create;
    Rest.Accept = 'application/json';
    Rest.ContentType = 'application/json';
    Rest.Method = rmPOST;
    Rest.ConnectTimeOut = 30000;
    Rest.BaseURL = ABaseUrl;
    Rest.Body = ABody;
    Rest.OnCompleted = 'OnRoutineCompleted';
    Rest.ExecuteAsync;

    IsLoading = True;
    myForm.FormWaiting.Visible = True;
  except
    IsLoading = False;
    myForm.FormWaiting.Visible = False;
    ShowMessage('Sunucuya bağlanırken hata: ' + LastExceptionMessage);
  }
}


void RequestRoutineFromAI;
var
  prompt, safePrompt: String;
{
  try

    if LastSkinType == ''  LastSkinType = 'Bilinmiyor';

    prompt =
      'Sen deneyimli bir cilt bakım uzmanısın. Kullanıcının cilt tipi: ' + LastSkinType + '. ' +
      '7 günlük (Pazartesi–Pazar), her gün için "sabah" ve "akşam" adım adım kısa ve uygulanabilir bir bakım rutini oluştur. ' +
      'Her gün için farklı rutinler yaz. ' +
      'Her adımı şu formatta ver: day|timeOfDay|stepOrder|step ' +
      'Örnek: Pazartesi|sabah|1|Nazik jel temizleyici. ' +
      'Sadece bu formatta, başka açıklama yazma.';

    safePrompt = prompt;
    safePrompt = ClGetStringReplace(safePrompt, '\', '\\');
    safePrompt = ClGetStringReplace(safePrompt, '"', '\"');
    safePrompt = ClGetStringReplace(safePrompt, #13#10, ' ');
    safePrompt = ClGetStringReplace(safePrompt, #10, ' ');
    safePrompt = ClGetStringReplace(safePrompt, #13, ' ');

    RequestBody = '{ "contents": [ { "parts": [ { "text": "' + safePrompt + '" } ] } ] }';

    API_KEY = 'YOUR_API_KEY_HERE'; // ← buraya kendi token'ını koy

    RestCreate(' https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=" rel="nofollow - https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key= ' + API_KEY, RequestBody);
  except
    ShowMessage('RequestRoutineFromAI hata: ' + LastExceptionMessage);
  }
}

void PrevDay;
{
  if DaysList == nil  
  Exit;
  if DaysList.Count == 0  
  Exit;
  
  if CurrentDay > 0  
  CurrentDay = CurrentDay - 1;
  RenderDay;
}

void NextDay;
{
  if DaysList == nil Exit;
  if DaysList.Count == 0 Exit;
  if CurrentDay < DaysList.Count - 1  CurrentDay = CurrentDay + 1;
  RenderDay;
}


void BuildUIFrame;
{
  myForm = TclForm.Create(Self);
  myForm.BtnFormMenu.Visible = False;
  myForm.FormWaiting.Visible = False;

  TopBarPnl = myForm.AddNewProPanel(myForm, 'TopBarPnl');
  TopBarPnl.Align = alTop;
  TopBarPnl.Height = 64;

  TitleLbl = myForm.AddNewProLabel(TopBarPnl, 'TitleLbl', 'Haftalık Bakım Rutini');
  TitleLbl.Align = alLeft;
  TitleLbl.Width = 260;
  TitleLbl.clProSettings.FontSize = 18;
  TitleLbl.SetclProSettings(TitleLbl.clProSettings);

  SkinTypeLbl = myForm.AddNewProLabel(TopBarPnl, 'SkinTypeLbl', 'Cilt tipi: ');
  SkinTypeLbl.Align = alClient;
  SkinTypeLbl.clProSettings.FontSize = 14;
  SkinTypeLbl.SetclProSettings(SkinTypeLbl.clProSettings);

  BackBtn = myForm.AddNewProButton(TopBarPnl, 'BackBtn', 'Kapat');
  BackBtn.Align = alRight;
  BackBtn.Width = 100;
  myForm.AddNewEvent(BackBtn, tbeOnClick, 'OnBackBtn');

  BodyPnl = myForm.AddNewProPanel(myForm, 'BodyPnl');
  BodyPnl.Align = alClient;
  BodyPnl.Margins.Top = 10;
  BodyPnl.Margins.Left = 10;
  BodyPnl.Margins.Right = 10;
  BodyPnl.Margins.Bottom = 10;

  NavPnl = myForm.AddNewProPanel(BodyPnl, 'NavPnl');
  NavPnl.Align = alTop;
  NavPnl.Height = 52;

  PrevDayBtn = myForm.AddNewProButton(NavPnl, 'PrevDayBtn', '< Önceki');
  PrevDayBtn.Align = alLeft;
  PrevDayBtn.Width = 120;
  myForm.AddNewEvent(PrevDayBtn, tbeOnClick, 'PrevDay');

  DayNameLbl = myForm.AddNewProLabel(NavPnl, 'DayNameLbl', 'Gün');
  DayNameLbl.Align = alClient;
  DayNameLbl.clProSettings.FontSize = 16;
  DayNameLbl.SetclProSettings(DayNameLbl.clProSettings);

  DayIndexLbl = myForm.AddNewProLabel(NavPnl, 'DayIndexLbl', '0/0');
  DayIndexLbl.Align = alRight;
  DayIndexLbl.Width = 60;
  DayIndexLbl.clProSettings.FontSize = 14;
  DayIndexLbl.SetclProSettings(DayIndexLbl.clProSettings);

  NextDayBtn = myForm.AddNewProButton(NavPnl, 'NextDayBtn', 'Sonraki >');
  NextDayBtn.Align = alRight;
  NextDayBtn.Width = 120;
  myForm.AddNewEvent(NextDayBtn, tbeOnClick, 'NextDay');

  RefreshBtn = myForm.AddNewProButton(NavPnl, 'RefreshBtn', 'Yenile (AI)');
  RefreshBtn.Align = alRight;
  RefreshBtn.Width = 120;
  myForm.AddNewEvent(RefreshBtn, tbeOnClick, 'RequestRoutineFromAI');

  // StepsContainer ve memo (gösterim)
  StepsContainerPnl = myForm.AddNewProPanel(BodyPnl, 'StepsContainerPnl');
  StepsContainerPnl.Align = alClient;
  StepsContainerPnl.Margins.Top = 10;
  StepsContainerPnl.Margins.Left = 10;
  StepsContainerPnl.Margins.Right = 10;
  StepsContainerPnl.Margins.Bottom = 10;

  StepsMemo = myForm.AddNewMemo(StepsContainerPnl, 'StepsMemo', 'Günlük adımlar burada gösterilecektir...');
  StepsMemo.Align = alClient;
  StepsMemo.ReadOnly = True;
  StepsMemo.TextSettings.WordWrap = True;
  StepsMemo.Text = '';
}

void OpenRoutineForm;
{
  try
    DBConnect;
    CreateRoutineTable;

    InitializeArrays = nil; 
    BuildUIFrame;

    LoadEmailAndSkinTypeFromDB;
    if LastSkinType == '' 
      SkinTypeLbl.Text = '(Cilt tipi bulunamadı)'
    else
      SkinTypeLbl.Text = '(Cilt tipi: ' + LastSkinType + ')';


    LoadDaysFromDB;
    CurrentDay = 0;
    if ((DaysList <> nil) && (DaysList.Count > 0)) 
      RenderDay;
    else
      StepsMemo.Lines.Add('Henüz AI ile oluşturulmuş rutin yok. "Yenile (AI)" ile oluşturun.');

    myForm.Run;
  except
    ShowMessage('Form açılırken hata: ' + LastExceptionMessage);
  }
}

/*
void OnBackBtn;
{
  myForm.Close;
}
*/




Sayfayı Yazdır | Pencereyi Kapat

Forum Software by Web Wiz Forums® version 12.07 - https://www.webwizforums.com
Copyright ©2001-2024 Web Wiz Ltd. - https://www.webwiz.net