Clomosy | Forum Ana Sayfa
Forum Anasayfa Forum Anasayfa > Genel Programlama > Genel İşlemler
  Aktif Konular Aktif Konular RSS - Syntax Error
  SSS SSS  Forumu Ara   Etkinlikler   Kayıt Ol Kayıt Ol  Giriş Giriş

Clomosy Resmi Forum Sitesidir. Amacımız kullanıcılarımıza, iş ortaklarımıza, danışmanlara, yazılımcılara programlarımız hakkında destek ve bilgi vermektir.

Syntax Error

 Yanıt Yaz Yanıt Yaz
Yazar
Mesaj
  Konu Arama Konu Arama  Topic Seçenekleri Topic Seçenekleri
Emetullah Emine Açılır Kutu İzle
Yeni Üye
Yeni Üye


Kayıt Tarihi: 04 Ağustos 2025
Durum: Aktif Değil
Puanlar: 2
Mesaj Seçenekleri Mesaj Seçenekleri   Teşekkürler (0) Teşekkürler(0)   Alıntı Emetullah Emine Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Konu: Syntax Error
    Gönderim Zamanı: 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

  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;
}
*/

Yukarı Dön
 Yanıt Yaz Yanıt Yaz

Forum Atla Forum İzinleri Açılır Kutu İzle

Forum Software by Web Wiz Forums® version 12.07
Copyright ©2001-2024 Web Wiz Ltd.

Bu Sayfa 0,063 Saniyede Yüklendi.