Page 1 sur 1

[Base] Conseil pour construire une requête SQL

MessagePublié: 02 Juin 2006 07:22
par cris59
RAPPEL 1

" ou guillemet ou double cote ou chr(34)

' ou apostrophe ou simple cote ou chr(39)

quelque soit le nom que vous utilisez, ce ne sont pas les mêmes touches sur votre clavier... deux apostrophes ne sont pas égales à un guillemet


RAPPEL 2

Une requête SQL est chaine avec un formatage spécifique

SELECT "Champ1" FROM "uneTable" WHERE "Champ2"='uneValeur'

- les noms de champs et de tables sont entre double cote

- les valeurs de champs sont entre simple cote


Méthode de construction d'une requête envoyée par macro

1. Ecrivez votre requête telle qu'elle devra être vue par votre base

SELECT "Champ1" FROM "uneTable" WHERE "Champ2"='uneValeur'

2. Mettre sa requête dans une chaine

METHODE 1

Mettre les " en début et fin de votre requête, puis doubler les " qui sont à l'intérieur de votre chaine

"SELECT ""Champ1"" FROM ""uneTable"" WHERE ""Champ2""='uneValeur'"

si uneValeur doit être une variable :

"SELECT ""Champ1"" FROM ""uneTable"" WHERE ""Champ2""='" & uneVariable & "'"


METHODE 2

Utiliser le code ASCII des " --> chr(34) et des ' --> chr(39)

"SELECT " & chr(34) & "Champ1" & chr(34) & " FROM " & chr(34) & "uneTable" & chr(34) & " WHERE " & chr(34) & "Champ2" & chr(34) & "='uneValeur'"

si uneValeur doit être une variable :


"SELECT " & chr(34) & "Champ1" & chr(34) & " FROM " & chr(34) & "uneTable" & chr(34) & " WHERE " & chr(34) & "Champ2" & chr(34) & "=" & chr(39) & uneVariable & chr(39)


ATTENTION

Si votre valeur de champ contient des ', il est nécessaire de les doubler !!

exemple

'l'artiste' deviendra 'l''artiste'



cris59

PS : j'espère ne pas avoir fait d'erreur, si c'est le cas dites le moi ....


Le modérateur a écrit:Merci pour ce sujet interessant mis en Post-it.

MessagePublié: 02 Juin 2006 07:55
par cris59
CONSEIL 1

Avant d'envoyer votre requête, faites un MsgBox dessus pour visualiser ce que vous allez envoyer ...

Cela vous permettra une correction rapide des problèmes de formatage de la chaine!

cris59

MessagePublié: 12 Juin 2006 19:34
par cris59
CONSEIL 2

Avant de vous lancer dans les requête par macro, assurez-vous que cela vous est nécessaire.

N'oubliez pas que vous pouvez faire des requêtes directement dans OOoBase :

1. des requêtes de type SELECT dans la section requête ... en mode ébauche, en vue SQL ou avec l'assistant

2. tous types de requêtes dans Outils / SQL ...

cris59

MessagePublié: 19 Jan 2007 10:15
par Dude
Requête INSERT pour insérer un enregistement :

On part du principe que vous avez un fichier ODB avec un nom de base enregistré "Test" (menu Outils / Options / Base / Base de données).

Dans notre exemple, nous avons une table Clients avec comme structure :
ID -> Clé primaire [INTEGER] + AutoValeur
Nom -> Texte [VARCHAR] 100

Code : Tout sélectionner   AgrandirRéduire
dim maConnexion as Object

Sub ConnecterSource()
Dim NomSource As String, login As String, password As String
Dim maSource As Object, monDbContext As Object
'Création du contexte
NomSource = "test"
monDbContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
maSource = monDbContext.getByName(NomSource)

'Les paramètres de connexion éventuels
login = ""
password = ""
maConnexion = maSource.getConnection(login, password)
if IsNull(maConnexion) then
  MsgBox("Connexion impossible", 16)
  Stop
end if
End Sub

Sub DeconnecterSource()
maConnexion.close
maConnexion.dispose
End Sub

Sub Insert()
dim maRequete as Object, resultat as long
dim insertSQL as String

ConnecterSource

insertSQL = "insert into " & chr(34) & "Clients" & chr(34) & " " & _
         "( " & chr(34) & "Nom" & chr(34) & ") values (" _
         & chr(39) & "DURAND" & chr(39) & ")"

maRequete = maConnexion.createStatement()
resultat = maRequete.executeUpdate(insertSQL)
MsgBox "Ok insertion effectuée !"

DeconnecterSource

End Sub

Requête DELETE

MessagePublié: 21 Août 2008 11:36
par Dude
Même chose pour une requête SQL visant à effacer des enregistrements

Dans l'exemple ci-dessous, je ne reprends que la procédure principale. La requête vise à détruire les clients dont le nom commence par "DU"
Code : Tout sélectionner   AgrandirRéduire
Sub Detruit()
dim maRequete as Object, resultat as long
dim reqSQL as String

ConnecterSource

reqSQL = "delete from " & chr(34) & "Clients" & chr(34) & " " & _
         " where " & chr(34) & "Nom" & chr(34) & " like " _
         & chr(39) & "DU%" & chr(39) & " "

maRequete = maConnexion.createStatement()
resultat = maRequete.executeUpdate(reqSQL)
MsgBox "Destruction effectuée pour " & resultat & " enregistrement(s)"

DeconnecterSource

End Sub


Vous noterez que le résultat d'exécution de la requête (via executeUpdate) contient le nombre d'enregistrements détruits.

8)

Requête SELECT

MessagePublié: 16 Sep 2008 15:22
par kimaidou
Pour compléter les requetes via une macro :
On cherche à récupérer la valeur renvoyée par une requête SELECT. Dans cet exemple, la requête ne renvoit qu'une ligne et qu'une colonne.

Code : Tout sélectionner   AgrandirRéduire
Sub ReqSELECT()
dim maRequete as Object, resultat as Object
dim selectSQL as String

ConnecterSource

selectSQL = "SELECT ""test"" FROM ""toto"" WHERE ""truc"" = '1'  "

maRequete = maConnexion.createStatement()
resultat = maRequete.executeQuery(selectSQL)

rem ** il faut utiliser la méthode next pour aller chercher le premier résultat de la requete
resultat.next

rem *** on affiche le resultat de la requete dans une boite de dialogue
msgbox resultat.getColumns().getByName("test").getString()

DeconnecterSource
End Sub

Re: [Base] Conseil pour construire une requête SQL

MessagePublié: 03 Oct 2008 17:15
par leo42
bonjour

un petit truc sympa qui simplifie la vie

quand on a une requête à passer par du code le plus simple c'est:
  1. créer la requête à l'aide de l'éditeur de base
  2. ouvrir l'éditeur en mode SQL
    puis copier le texte de la requête dans un logiciel de traitement de textes
  3. se servir de la fonction "REMPLACER" pour remplacer tous les " par des "" mettre un " en début et en fin de requête

et voila il ne reste plus qu'à coller la requête dans le code

Re: [Base] Conseil pour construire une requête SQL

MessagePublié: 14 Sep 2011 04:48
par alphaville974
Merci pour ce post :D :D :D

Re: [Base] Conseil pour construire une requête SQL

MessagePublié: 20 Mars 2016 09:23
par martinbrait
@leo42
Dans le basic, on peut aussi écrire les champs sans aucune côte. :idea:

côté console :
SELECT ""JolieTable"" FROM ""MaBase""

suffisant, côté basic :
strSQL="SELECT JolieTable FROM MaBase"