Quelques commandes pour accéder à une base SQL
Publié : jeu. 27/oct./2005 10:30
Pour ceux que ça intéresse, voila quelques commandes pour accéder à une base SQL
Vous pouvez bien sûr en faire une librairie, ou ce que vous voulez, voila
à la fin vous trouverez les commandes mises en oeuvre
Vous pouvez bien sûr en faire une librairie, ou ce que vous voulez, voila

à la fin vous trouverez les commandes mises en oeuvre
Code : Tout sélectionner
Procedure DB_Connect(DataBase.s, User.s, Password.s) ; Retourne l'identifiant de la base de donées (DataBaseID)
Global list, SQL.s
If InitDatabase() = 0 : ProcedureReturn 0 : EndIf
db = OpenDatabase(#PB_Any, DataBase, user, password)
ProcedureReturn db
EndProcedure
Procedure DB_CountRow(Table.s) ; Retourne le nombre de ligne de la table
db = DatabaseQuery("SELECT * FROM " + table)
SQL = "SELECT * FROM " + table
If db
FirstDatabaseRow()
NextDatabaseRow()
Repeat
ligne = ligne + 1
Until NextDatabaseRow() = 0
ProcedureReturn ligne
Else
ProcedureReturn db
EndIf
EndProcedure
Procedure DB_CountColumn(Table.s) ; Retourne le nombre de colonne de la table
db = DatabaseQuery("SELECT * FROM " + table)
SQL = "SELECT * FROM " + table
If db
FirstDatabaseRow()
ProcedureReturn DatabaseColumns()
Else
ProcedureReturn db
EndIf
EndProcedure
Procedure DB_CreateTable(Table.s, ColumnText.s) ; Permet de créer une table
; ColumnText.s="NomCol.type;NomCol.type;..."
; type[(Ncaractere[,Ndecimal])]
; type : int(Nbre de chiffre), decimal(Nbre de chiffre, Nbre de décimale), numeric(Nbre de chiffre), char(Nbre de caractère), varchar(Nbre de caractère)
; char -> chaine fixe ; varchar -> chaine variable
; ex: "Nom.char(8);Prénom.varchar(8);Age.int(3)"
; vous pouvez aussi spécifier les colonnes primaires...
ncol = CountString(ColumnText, ".")
For a = 1 To ncol
If a = 1
col$ = StringField(StringField(ColumnText, a, ";"), 1, ".") + " " + StringField(StringField(ColumnText, a, ";"), 2, ".")
Else
col$ = col$ + ", " + StringField(StringField(ColumnText, a, ";"), 1, ".") + " " + StringField(StringField(ColumnText, a, ";"), 2, ".")
EndIf
Next
SQL = "CREATE TABLE " + table + " (" + col$ + ")"
ProcedureReturn DatabaseQuery("CREATE TABLE " + table + " (" + col$ + ")")
EndProcedure
Procedure DB_DeleteTable(Table.s) ; Permet de supprimer une table
SQL = "DROP TABLE " + table
ProcedureReturn DatabaseQuery("DROP TABLE " + table)
EndProcedure
Procedure DB_InsertRow(Table.s, RowText.s) ; Permet d'insérer une ligne : RowText="1;2;2;bonjour;3;coucou..." 1=numero de colonne ; 2=texte
db = DatabaseQuery("SELECT * FROM " + table)
SQL = "SELECT * FROM " + table
If db
RowText=ReplaceString(RowText,"\","\\")
ni = CountString(RowText, ";")
For a = 1 To ni Step 2
If a = 1
col$ = DatabaseColumnName(Val(StringField(RowText, a, ";")))
Else
col$ = col$ + ", " + DatabaseColumnName(Val(StringField(RowText, a, ";")))
EndIf
Next
For a = 1 To ni Step 2
If DatabaseColumnType(Val(StringField(RowText, a, ";"))) = 2
If a = 1
text$ = Chr(34) + StringField(RowText, a + 1, ";") + Chr(34)
Else
text$ = text$ + ", " + Chr(34) + StringField(RowText, a + 1, ";") + Chr(34)
EndIf
Else
If a = 1
text$ = StringField(RowText, a + 1, ";")
Else
text$ = text$ + ", " + StringField(RowText, a + 1, ";")
EndIf
EndIf
Next
SQL = "INSERT INTO " + table + " (" + col$ + ") VALUES (" + text$ + ")"
ProcedureReturn DatabaseQuery("INSERT INTO " + table + " (" + col$ + ") VALUES (" + text$ + ")")
Else
ProcedureReturn db
EndIf
EndProcedure
Procedure DB_UpdateRow(Table.s, PrimaryColumn.l, PrimaryColumnText.s, Column.l, Update.s) ; la colonne reférence fait référence à une des colonnes primaires de la base (de préférence)
db = DatabaseQuery("SELECT * FROM " + table)
SQL = "SELECT * FROM " + table
If db
If DatabaseColumnType(column) = 2
update = Chr(34) + update + Chr(34)
EndIf
If DatabaseColumnType(PrimaryColumn) = 2
PrimaryColumnText = Chr(34) + PrimaryColumnText + Chr(34)
EndIf
SQL = "UPDATE " + table + " SET " + DatabaseColumnName(column) + " = " + update + " WHERE " + DatabaseColumnName(PrimaryColumn) + " = " + PrimaryColumnText
ProcedureReturn DatabaseQuery("UPDATE " + table + " SET " + DatabaseColumnName(column) + " = " + update + " WHERE " + DatabaseColumnName(PrimaryColumn) + " = " + PrimaryColumnText)
Else
ProcedureReturn db
EndIf
EndProcedure
Procedure DB_DeleteRow(Table.s, PrimaryColumn.l, PrimaryColumnText.s) ; Permet de supprimer une ligne
db = DatabaseQuery("SELECT * FROM " + table)
SQL = "SELECT * FROM " + table
If db
If DatabaseColumnType(PrimaryColumn) = 2
PrimaryColumnText = Chr(34) + PrimaryColumnText + Chr(34)
EndIf
SQL = "DELETE FROM " + table + " WHERE " + DatabaseColumnName(PrimaryColumn) + " = " + PrimaryColumnText
ProcedureReturn DatabaseQuery("DELETE FROM " + table + " WHERE " + DatabaseColumnName(PrimaryColumn) + " = " + PrimaryColumnText)
Else
ProcedureReturn db
EndIf
EndProcedure
Procedure DB_List(Table.s, Column.l, Sort.l) ; Met en mémoire les valeurs de la table sans changer l'ordre de la table : 1 ordre alphanumérique : 2 inverse : autre pas de trie (Initialisation obligatoire : DB_Connect)
ncol = DB_CountColumn(Table)
nlig = DB_CountRow(Table)
If ncol
Dim DB.s(nlig, ncol)
If sort = 1 ; tri dans l'ordre alphabétique ou numérique
tri$ = " ORDER BY " + DatabaseColumnName(column)
ElseIf sort = 2 ; tri à l'inverse de l'ordre alphabétique ou numérique
tri$ = " ORDER BY " + DatabaseColumnName(column) + " DESC"
Else
tri$ = ""
EndIf
SQL = "SELECT * FROM " + table + tri$
db = DatabaseQuery("SELECT * FROM " + table + tri$)
If db
FirstDatabaseRow()
NextDatabaseRow()
For a = 0 To nlig - 1
For b = 0 To ncol - 1
If DatabaseColumnType(b) = 1
db(a, b) = Str(GetDatabaseLong(b))
ElseIf DatabaseColumnType(b) = 2
db(a, b) = ReplaceString(GetDatabaseString(b),"\\","\")
ElseIf DatabaseColumnType(b) = 3
db(a, b) = StrF(GetDatabaseFloat(b))
EndIf
Next
NextDatabaseRow()
Next
ProcedureReturn ncol * nlig
Else
ProcedureReturn db
EndIf
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure.s DB_GetValue(Column.l, Row.l) ; Retourne la valeur de la cellule choisie (Initialisation obligatoire : DB_Connect, DB_List)
ProcedureReturn db(Row, Column)
EndProcedure
Procedure DB_Sort(Table.s, Column.l, Sort.l) ; Met la table dans l'ordre souhaitée, Mise en ordre physique de la base : 1 ordre alphanumérique : 2 inverse : autre pas de trie (Initialisation obligatoire : DB_Connect)
DB_List(Table, column, sort)
ncol = DB_CountColumn(Table)
nlig = DB_CountRow(Table)
For a = 0 To nlig - 1
DB_DeleteRow(table.s, Column, db(a, column))
Next
For a = 0 To nlig - 1
For b = 0 To ncol - 1
If b = 0
text.s = Str(b) + ";" + db(a, b)
Else
text.s = text + ";" + Str(b) + ";" + db(a, b)
EndIf
Next
p = DB_InsertRow(table.s, text)
If p = 0
ProcedureReturn 0
EndIf
Next
ProcedureReturn 1
EndProcedure
Procedure DB_ListTable(DataBaseID) ; Si OK : retourne le nombre de tables contenues dans la base de donnees : sinon : -1
Global ListT
If DataBaseID
If ListT=0 : ListT=1 : NewList ListTable.s() : Else : ClearList(ListTable()) : EndIf
#DB1=1
#SQL_SUCCESS = 0
#SQL_SUCCESS_WITH_INFO = 1
Handle=PeekL(IsDatabase(DataBaseID)+4)
res=SQLTables_(Handle,0,0,0,0,0,0,0,0)
res&$FFFF
If res = #SQL_SUCCESS Or res = #SQL_SUCCESS_WITH_INFO
strlen=128+1
string1$=Space(strlen-1):strlen1.l=0
string2$=Space(strlen-1):strlen2.l=0
string3$=Space(strlen-1):strlen3.l=0
string4$=Space(strlen-1):strlen4.l=0
string5$=Space(strlen-1):strlen5.l=0
SQLBindCol_(Handle,1,1,@string1$,strlen,@strlen1)
SQLBindCol_(Handle,2,1,@string2$,strlen,@strlen2)
SQLBindCol_(Handle,3,1,@string3$,strlen,@strlen3)
SQLBindCol_(Handle,4,1,@string4$,strlen,@strlen4) ;#SQL_C_CHAR=1
While SQLFetch_(Handle)&$FFFF=0
AddElement(ListTable())
ListTable()=string1$+"|"+string2$+"|"+string3$+" |"+string4$
Wend
ProcedureReturn CountList(ListTable())
EndIf
EndIf
ProcedureReturn -1
EndProcedure
Procedure DB_ListTableSelect(Number) ; Retourne le nom de la nième table (Base de donnees|propriétaire|Nom de la table)
SelectElement(ListTable(),Number)
ProcedureReturn ListTable()
EndProcedure
Procedure.s DB_SQL() ; Liste la dernière commande SQL exécuté
ProcedureReturn SQL
EndProcedure
; Debug DB_Connect("bdsseguin","root","")
; n=DB_ListTable("laser","sa","")
; For a=0 To n-1
; Debug DB_ListTableSelect(a)
; Next
; Debug DB_CountRow("t_fiche")
; Debug DB_CountColumn("t_fiche")
; Debug DB_CreateTable("test","col1.int(3);Col2.char(8)")
; Debug DB_DeleteTable("test")
; Debug DB_InsertRow("t_fiche","0;3;1;121")
; Debug DB_UpdateRow("t_fiche",1,"122",2,"1000")
; Debug DB_SQL()
; Debug DatabaseError()
; Debug DB_List("t_fiche",1,0)
; Debug DB_GetValue(1,2)
; Debug DB_Sort("t_fiche",1,1)