24. januar 2001 - 14:01Der er
10 kommentarer og 1 løsning
Max 128 karakterer i TQuery
Jeg har en Tquery komponent på min form, nu prøver jeg at bruge dette til at udføre et query som er over 128 karakterer lang dette kan dog ikke lade sig gøre. Jeg får en error hvor der bare står at max length er 128 char.
Hvordan ser din tabelstruktur ud, jeg tror det er der den ligger. Du kan lave SQL-forespørgelser der er lige så lange det skal være, jeg laver dagligt nogle der er ca 500 karakterer lange. Prøv evt. :
Query1.SQL.Text := \'<SQL-kode>\';
Husk at du ikke kan bruge \' uden at du sætter to men det kan du se i delphi editoren hvis du har sat string til en anden farve
Jeg har på en MSSql server en tabel med et felttype varchar(500) det er dette felt jeg prøver at skrive en tekst ned i vha. en stored procedure som ligner dette:
CREATE PROCEDURE SP_TilfoejJournal @text varchar(500) AS insert into journal values(@text)
Det sjove er at når jeg prøver at køre denne fra query analyzer til sql server 7 er der ingen problemer. Jeg bruger ODBC fra delphi til at forbinde til databasen, kan dette have noget at sige.
Nu kan det godt være du synes jeg er skør, men jeg vil gerne bruge en stored procedure da min brugere så ikke skal have rettigheder på tabellen, men kun execute på min SP. Kan det lade sig gøre at bruge denne blobstream med en SP ?
Det ved jeg faktisk ikke, for jeg har ikke prøvet, men der er jo noget der kan tyde på at du kun kan overføre et parameter på 128 char til sådan en. Kan du ikke lave en dummy tabel med et blobfield i og så opd. den, lave en trigger på den der overfører data til den rigtige tabel, så har brugerne kun adgang til dummy tabelen ( bare en ide )
var Stream1, Stream2 : TBlobStream; begin Stream1 := TBlobStream.Create(Table1Notes, bmRead); try Table2.Edit; { here’s a different way to create a blob stream } Stream2 := Table2.CreateBlobStream(Table2.FieldByName(\'Remarks\'), bmReadWrite); try Stream2.CopyFrom(Stream1, Stream1.Size); Table2.Post; finally Stream2.Free; end; finally Stream1.Free;
end; end;
Mit Eks. :
procedure TForm1.Button1Click(Sender: TObject); VAR S : TBlobStream; begin S := Query1.CreateBlobStream(Query1.FieldByName(\'<Blobfieldname>\'),bmReadWrite); Memo1.Lines.SaveToStream(S); S.Free; end;
jeg har løst problemet ved at lave en SP som tilføjer til feltet og så deler delphi strengen op og sender den at det antal gange som er nødvendigt. Vist lidt en work around, men det går nok i dette tilfælde. Tak for hjælpen.
Dem vil jeg da gerne se du kan sende dem til mig på kgn@linux.eucsyd.dk
/Klaus
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.